DIBUTILS.H
资源名称:Cimage.zip [点击查看]
上传用户:wep9318
上传日期:2007-01-07
资源大小:893k
文件大小:5k
源码类别:
图片显示
开发平台:
Visual C++
- /**************************************************************************
- UTILS.H - useful functions for WinG Sample Apps
- **************************************************************************/
- /***************************************************************************
- (C) Copyright 1994 Microsoft Corp. All rights reserved.
- You have a royalty-free right to use, modify, reproduce and
- distribute the Sample Files (and/or any modified version) in
- any way you find useful, provided that you agree that
- Microsoft has no warranty obligations or liability for any
- Sample Application Files which are modified.
- **************************************************************************/
- /***************************************************************************
- Functions for handling Device Independent Bitmaps and clearing the
- System Palette.
- **************************************************************************/
- #ifndef SAMPLES_UTILS_H
- #define SAMPLES_UTILS_H
- typedef LPBITMAPINFOHEADER PDIB;
- typedef HANDLE HDIB;
- /***************************************************************************
- External function declarations
- **************************************************************************/
- void ClearSystemPalette(void);
- PDIB DibOpenFile(LPSTR szFile);
- int DibWriteFile(LPSTR szFile, LPBITMAPINFOHEADER lpbi);
- // An alternative DIB writing function
- BOOL WriteDIB(const char *szFile, LPBITMAPINFOHEADER lpbi);
- BOOL DibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
- PDIB DibCreate(int bits, int dx, int dy);
- BOOL DibMapToPalette(PDIB pdib, HPALETTE hpal);
- HPALETTE MakePalette(const BITMAPINFO FAR* Info, UINT flags);
- /****************************************************************************
- Internal function declarations
- ***************************************************************************/
- PDIB DibReadBitmapInfo(HFILE fh);
- /****************************************************************************
- DIB macros.
- ***************************************************************************/
- #ifdef WIN32
- #define HandleFromDib(lpbi) GlobalHandle(lpbi)
- #else
- #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
- #endif
- #define DibFromHandle(h) (PDIB)GlobalLock(h)
- #define DibFree(pdib) GlobalFreePtr(pdib)
- #define WIDTHBYTES(i) ((unsigned)((i+31)&(~31))/8) /* ULONG aligned ! */
- #define DibWidth(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
- #define DibHeight(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
- #define DibBitCount(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
- #define DibCompression(lpbi) (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
- #define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
- #define DibWidthBytes(lpbi) DibWidthBytesN(lpbi, (lpbi)->biBitCount)
- #define DibSizeImage(lpbi) ((lpbi)->biSizeImage == 0
- ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight)
- : (lpbi)->biSizeImage)
- #define DibSize(lpbi) ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
- #define DibPaletteSize(lpbi) (DibNumColors(lpbi) * sizeof(RGBQUAD))
- #define DibFlipY(lpbi, y) ((int)(lpbi)->biHeight-1-(y))
- //HACK for NT BI_BITFIELDS DIBs
- #ifdef WIN32
- #define DibPtr(lpbi) ((lpbi)->biCompression == BI_BITFIELDS
- ? (LPVOID)(DibColors(lpbi) + 3)
- : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
- #else
- #define DibPtr(lpbi) (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
- #endif
- #define DibColors(lpbi) ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
- #define DibNumColors(lpbi) ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8
- ? (int)(1 << (int)(lpbi)->biBitCount)
- : (int)(lpbi)->biClrUsed)
- #define DibXYN(lpbi,pb,x,y,n) (LPVOID)(
- (BYTE _huge *)(pb) +
- (UINT)((UINT)(x) * (UINT)(n) / 8u) +
- ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
- #define DibXY(lpbi,x,y) DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
- #define FixBitmapInfo(lpbi) if ((lpbi)->biSizeImage == 0)
- (lpbi)->biSizeImage = DibSizeImage(lpbi);
- if ((lpbi)->biClrUsed == 0)
- (lpbi)->biClrUsed = DibNumColors(lpbi);
- if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0)
- ; // (lpbi)->biClrUsed = 3;
- #define DibInfo(pDIB) ((BITMAPINFO FAR *)(pDIB))
- /***************************************************************************/
- #ifndef BI_BITFIELDS
- #define BI_BITFIELDS 3
- #endif
- #ifndef HALFTONE
- #define HALFTONE COLORONCOLOR
- #endif
- #endif