home *** CD-ROM | disk | FTP | other *** search
- //
- // Macros for dealing with Device independent bitmaps
- //
- // 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.
- //
- // (C) Copyright Microsoft Corp. 1993-94. All rights reserved.
- //
- //History
- //941010 rkb Split from DIB.H
- //890623 toddla Created
- //
-
- #ifndef _INC_DIBMACRO
- #define _INC_DIBMACRO
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #ifdef _WIN32
- // #include "Win32cnv.h"
- #define HUGE
- #else
- #define HUGE _huge
- #endif
- typedef LPBITMAPINFOHEADER PDIB;
- typedef HANDLE HDIB;
- typedef BYTE HUGE * HPBYTE;
-
- // DIB Accessor 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)
-
- // DWORD aligned!
- #define WIDTHBYTES(cbits) ((((unsigned)cbits+31)&(~31))/8)
-
- #define DibWidth(pdib) ((UINT)(pdib)->biWidth)
- #define DibHeight(pdib) (((pdib)->biHeight < 0) \
- ? (UINT) (- (pdib)->biHeight) \
- : (UINT) (pdib)->biHeight \
- )
-
- #define DibBitCount(pdib) (UINT)((pdib)->biBitCount)
- #define DibCompression(pdib) (DWORD)((pdib)->biCompression)
-
- #define DibWidthBytesN(pdib, n) WIDTHBYTES(DibWidth(pdib) * (UINT)(n))
- #define DibWidthBytes(pdib) DibWidthBytesN(pdib, DibBitCount(pdib))
-
- #define DibPitch(pdib) DibWidthBytesN(pdib, (pdib)->biBitCount)
-
- #define DibSizeImage(pdib) ((pdib)->biSizeImage == 0 \
- ? (DWORD)DibPitch(pdib) \
- * (DWORD)DibHeight(pdib) \
- : (pdib)->biSizeImage \
- )
-
- #define DibSizeColors(pdib) (DibNumColors(pdib) * sizeof(RGBQUAD))
- #define DibPaletteSize(lpbi) (DibNumColors(lpbi) * sizeof(RGBQUAD))
- #define DibSizeHeader(pdib) ((pdib)->biSize)
- #define DibSize(pdib) ((pdib)->biSize \
- + DibSizeImage(pdib) \
- + DibSizeColors(pdib))
-
- #define DibFlipY(lpbi, y) ((int)(lpbi)->biHeight-1-(y))
-
- //HACK for NT BI_BITFIELDS DIBs
- #ifdef WIN32
- #define DibPtr(lpbi) ((lpbi)->biCompression == BI_BITFIELDS \
- ? (HPBYTE)(DibColors(lpbi) + 3) \
- : (HPBYTE)(DibColors(lpbi) \
- + (UINT)(lpbi)->biClrUsed))
- #else
- #define DibPtr(lpbi) (HPBYTE)(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) (HPBYTE)( \
- (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
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif // _INC_DIBMACRO
-