www.pudn.com > backmode824.rar > Dibapi.h
#define HDIB HANDLE
#define PALVERSION 0x300
#define DIB_HEADER_MARKER 0x4d42
#define PW_WINDOW 1
#define PW_CLIENT 2
#define MEAN_GRAY 0
#define MAXIMUM_GRAY 1
#define WEIGHT_GRAY 2
#define UNDEFINED (-1.0)
#define RGB_COLOR 0
#define CMYK_COLOR 1
#define HSI_COLOR 2
#define HLS_COLOR 3
#define KERNELCOLS 3
#define KERNELROWS 3
#define KERNELELEMENTS (KERNELCOLS*KERNELROWS)
#define FILTER1 1
#define FILTER2 2
#define FILTER3 3
#define IS_WIN30_DIB(lpbi)\
((*(LPWORD)(lpbi)) == sizeof(BITMAPINFOHEADER))
#define WIDTHBYTES(bits)\
(((bits)+31)/32*4)
#define RECTWIDTH(lpRect)\
(lpRect->right-lpRect->left)
#define RECTHEIGHT(lpRect)\
(lpRect->bottom-lpRect->top)
#define BOUND(x,mn,mx)\
((x)<(mn)?(mn):((x)>(mx)?(mx):(x)))
#define UPVALUE(x,n)\
((x)/((n)?(n):1)+((x)%((n)?(n):1)?1:0))
#define PIXEL_OFFSET24(i,j,nWidthBytes)\
(LONG)((LONG)i*(LONG)nWidthBytes+(LONG)(j)*3)
#define PIXEL_OFFSET08(i,j,nWidthBytes)\
(LONG)((LONG)i*(LONG)nWidthBytes+(LONG)(j))
typedef struct _NODE
{
BOOL bIsLeaf; // TRUE if node has no children
UINT nPixelCount;// Number of pixels represented by this'l
UINT nRedSum; // Sum of red components
UINT nGreenSum; //Sum of green components
UINT nBlueSum; // Sum of blue components
struct _NODE* pChild[8]; // Pointers to child nodes
struct _NODE* pNext; // Pointer to next reducible node
} NODE;
typedef struct
{
int Element[KERNELELEMENTS];
int Divisor;
} KERNEL;
//调色板函数
HPALETTE CreateDIBPalette(LPBYTE lpbi);
int PalEntriesOnDevice(HDC hDC);
BOOL MapDIBColorsToPalette(HDIB hDIB,HPALETTE hPalette);
HPALETTE GetSystemPalette(void);
BOOL HDisplayPalette(HDC hDC,LPRECT lpRect,HPALETTE hPal);
//属性函数
DWORD BytesPerLine(LPBYTE lpDIB);
DWORD DIBBlockSize(LPBYTE lpDIB);
WORD DIBBitCount(LPBYTE lpDIB);
DWORD DIBHeight(LPBYTE lpDIB);
WORD DIBNumColors(LPBYTE lpDIB);
DWORD DIBWidth(LPBYTE lpDIB);
LPBYTE FindDIBBits(LPBYTE lpDIB);
WORD PaletteSize(LPBYTE lpDIB);
DWORD BytesPerLine(HDIB hDIB);
DWORD DIBBlockSize(HDIB hDIB);
WORD DIBBitCount(HDIB hDIB);
DWORD DIBHeight(HDIB hDIB);
WORD DIBNumColors(HDIB hDIB);
DWORD DIBWidth(HDIB hDIB);
LPBYTE FindDIBBits(HDIB hDIB);
WORD PaletteSize(HDIB hDIB);
//初始化函数
HDIB CreateDIB(DWORD dwWidth,DWORD dwHeight,WORD wBitCount);
HDIB CreateDefaultDIB(DWORD dwWidth,DWORD dwHeight);
void DestroyDIB(HDIB hDib);
HANDLE ReadDIBFile(HANDLE hFile);
HANDLE LoadDIB(LPCTSTR lpFileName);
BOOL SaveDIB(HANDLE hDib,LPCTSTR lpFileName);
//显示函数
BOOL PaintBitmap(HDC hDC,LPRECT lpDCRect,HBITMAP hDDB,LPRECT lpDDBRect,HPALETTE hPal, DWORD dwRop);
BOOL PaintDIB(HDC hDC,LPRECT lpDCRect,HANDLE hDIB,LPRECT lpDIBRect,HPALETTE hPal, DWORD dwRop);
//操作函数
HBITMAP DIBToDIBSection(LPBYTE lpDIB);
HDIB DIBSectionToDIB(HBITMAP hBitmap);
BOOL CopyColorTable(LPBITMAPINFO lpTarget,LPBITMAPINFO lpSource,HPALETTE hPalSrc);
HDIB ConvertDIBFormat(LPBYTE lpDIB,UINT nWidth,UINT nHeight,UINT nbpp,BOOL bStrech,HPALETTE hPalSrc);
HDIB BitmapToDIB(HBITMAP hBitmap,HPALETTE hPal);
HDIB BitmapToDIB(HBITMAP hBitmap,HPALETTE hPalette,WORD wBitCount);
HBITMAP DIBToBitmap(HDIB hDIB,HPALETTE hPal);
//捕获函数群
HBITMAP CopyScreenToBitmap(LPRECT lpRect);
HBITMAP CopyWindowToBitmap(HWND hWnd,WORD fPrintArea);
HBITMAP CopyClientRectToBitmap(HWND hWnd,LPRECT lpRect);
HDIB CopyScreenToDIB(LPRECT lpRect);
HDIB CopyWindowToDIB(HWND hWnd,WORD fPrintArea);
HDIB CopyClientRectToDIB(HWND hWnd,LPRECT lpRect);
//定时函数
void Delay (DWORD dwDelayTime);
//鼠标函数
void WaitCursorBegin(void);
void WaitCursorEnd(void);
//特技处理所需子函数
BOOL Fade(int nDeltaR,int nDeltaG,int nDeltaB,BYTE rm,BYTE gm,BYTE bm,BYTE *r,BYTE *g,BYTE *b);
HANDLE CopyHandle(HANDLE h);
//颜色处理函数
void AddColor(NODE** ppNode,BYTE r,BYTE g,BYTE b,UINT nColorBits,UINT nLevel,UINT* pLeafCount,NODE** pReducibleNodes);
HPALETTE BuildOctreePalette(HANDLE hImage, UINT nMaxColors,UINT nColorBits);
HDIB ColorQuantizeDIB(HDIB hDIB,UINT nColorBits,UINT nMaxColors);
HPALETTE ConvertToGrayScale(HDIB hDib,int nMethod,double fRedWeight, double fGreenWeight,double fBlueWeight);
NODE* CreateNode(UINT nLevel,UINT nColorBits,UINT* pLeafCount,NODE** pReducibleNodes);
HPALETTE CreateOctreePalette(HDIB hDIB,UINT nMaxColors,UINT nColorBits);
HPALETTE CreateOctreePalette(LPBYTE lpDIB,UINT nMaxcolors,UINT nColorBits);
void DeleteTree (NODE** ppNode);
void GetPaletteColors (NODE* pTree,PALETTEENTRY* pPalEntries,UINT* pIndex);
int GetLeftShiftCount (DWORD dwVal);
int GetRightShiftCount (DWORD dwVal);
void ReduceTree(UINT nColorBits,UINT* pLeafCount,NODE** pReducibleNodes);
//颜色空间相互转换函数
BOOL AdjustDIBColor(HDIB hDib, int nColorModel,int v1,int v2, int v3);
BOOL RGBToShort2HS(LPBITMAPINFOHEADER lpbi,LPBYTE lpdib,
short *lpDataH,short *lpDataS);
void HSItoRGB(double h,double s,double i,BYTE *r,BYTE *g,BYTE *b);
void RGBtoHSI(BYTE r,BYTE g,BYTE b,double *h,double *s,double *i);
void RGBtoHSV(BYTE r,BYTE g,BYTE b,double *h,double *s,double *v);
void HLStoRGB(double h,double l,double s,BYTE *r,BYTE *g, BYTE *b);
void RGBtoHLS(BYTE r,BYTE g,BYTE b,double *h,double *l,double *s);
void CMYKtoRGB(BYTE c,BYTE m,BYTE y,BYTE k,BYTE *r,BYTE *g,BYTE *b);
void RGBtoCMYK(BYTE r,BYTE g,BYTE b,BYTE *c,BYTE *m,BYTE *y,BYTE *k);
double Value(double n1, double n2, double hue);
void RGBtoHS(BYTE r,BYTE g,BYTE b,double *h,double *s);
//亮度调整
BOOL AdjustDIBBrightness(HDIB hDib,int v);
void ChangeBrightness(int nDelta,BYTE *r,BYTE *g,BYTE *b);
//对比度调整
BOOL AdjustDIBContrast(HDIB hDib,int v);
void IncreaseContrast(BYTE *pByte,const int Low,const int High,const float Grad);
void DecreaseContrast(BYTE *pByte,const int Level, const float Grad);
void ChangeContrast(int nDelta,BYTE *r,BYTE *g,BYTE *b);
// 图象处理函数
BOOL ConvoluteDIB24(HDIB hDib,KERNEL *lpKernel,int Strength,int nKernelNum);
BOOL ConvoluteDIB08(HDIB hDib,KERNEL *lpKernel,int Strength,int nKernelNum);
void DoConvoluteDlB24(int *red,int *green,int *blue,int i,int j,WORD wBytesPerLine,LPBYTE lpDIBits, KERNEL *lpKernel);
void DoConvoluteDlB08(int *gray,int i,int j,WORD wBytesPerLine,LPBYTE lpDIBits, KERNEL *lpKernel);
//高通滤波器
BOOL HighPassDIB(HDIB hDib,int Strength,int nAlgorithm);
//低通滤波器
BOOL LowPassDIB(HDIB hDib,int Strength,int nAlgorithm);
//中值滤波
BOOL MedianFilterDIB24(HDIB hDib);
void DoMedianFilterDIB24(int *red,int *green,int *blue,int i,int j,WORD wBytesPerLine,LPBYTE lpDIBits);
BOOL MedianFilterDIB08(HDIB hDib);
void DoMedianFilterDIB08(int *gray,int i,int j,WORD wBytesPerLine, LPBYTE lpDIBits);
int compare(const void *e1, const void *e2);
BOOL MedianPassDIB(HDIB hDib);
//二值化函数
BOOL BinaryDIB08(HDIB hDib);
//数据读取函数
BOOL ReadDIB08(LPCTSTR lpDataFile,HDIB hDib);