home *** CD-ROM | disk | FTP | other *** search
/ Using Visual Basic 5 (Platinum Edition) / vb5.iso / ACTIVEX / SRDVID / DATA.Z / dibmacro.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-10  |  4.9 KB  |  131 lines

  1. //
  2. //      Macros for dealing with Device independent bitmaps
  3. //
  4. //      You  have  a  royalty-free  right  to use, modify, reproduce and
  5. //      distribute the Sample Files (and/or any modified version) in any
  6. //      way you find useful, provided that you agree that Microsoft  has
  7. //      no warranty obligations or liability for any Sample  Application
  8. //      Files which are modified.
  9. //
  10. //      (C) Copyright Microsoft Corp. 1993-94.  All rights reserved.
  11. //
  12. //History
  13. //941010 rkb    Split from DIB.H
  14. //890623 toddla Created
  15. //
  16.  
  17. #ifndef _INC_DIBMACRO
  18. #define _INC_DIBMACRO
  19.  
  20. #ifdef __cplusplus
  21. extern "C" {
  22. #endif
  23.  
  24. #ifdef _WIN32
  25. // #include "Win32cnv.h"
  26. #define HUGE
  27. #else
  28. #define HUGE _huge
  29. #endif
  30. typedef LPBITMAPINFOHEADER PDIB;
  31. typedef HANDLE             HDIB;
  32. typedef BYTE HUGE *        HPBYTE;
  33.  
  34. //      DIB Accessor Macros
  35.  
  36. #ifdef  _WIN32
  37.     #define HandleFromDib(lpbi) GlobalHandle(lpbi)
  38. #else
  39.     #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
  40. #endif
  41.  
  42. #define DibFromHandle(h)        (PDIB)GlobalLock(h)
  43.  
  44. #define DibFree(pdib)           GlobalFreePtr(pdib)
  45.  
  46. //  DWORD aligned!
  47. #define WIDTHBYTES(cbits)       ((((unsigned)cbits+31)&(~31))/8)
  48.  
  49. #define DibWidth(pdib)          ((UINT)(pdib)->biWidth)
  50. #define DibHeight(pdib)         (((pdib)->biHeight < 0)                 \
  51.                                  ? (UINT) (- (pdib)->biHeight)          \
  52.                                  : (UINT) (pdib)->biHeight              \
  53.                                 )
  54.  
  55. #define DibBitCount(pdib)       (UINT)((pdib)->biBitCount)
  56. #define DibCompression(pdib)    (DWORD)((pdib)->biCompression)
  57.  
  58. #define DibWidthBytesN(pdib, n) WIDTHBYTES(DibWidth(pdib) * (UINT)(n))
  59. #define DibWidthBytes(pdib)     DibWidthBytesN(pdib, DibBitCount(pdib))
  60.  
  61. #define DibPitch(pdib)          DibWidthBytesN(pdib, (pdib)->biBitCount)
  62.  
  63. #define DibSizeImage(pdib)      ((pdib)->biSizeImage == 0               \
  64.                                  ? (DWORD)DibPitch(pdib)                \
  65.                                  * (DWORD)DibHeight(pdib)               \
  66.                                  : (pdib)->biSizeImage                  \
  67.                                 )
  68.  
  69. #define DibSizeColors(pdib)     (DibNumColors(pdib) * sizeof(RGBQUAD))
  70. #define DibPaletteSize(lpbi)    (DibNumColors(lpbi) * sizeof(RGBQUAD))
  71. #define DibSizeHeader(pdib)     ((pdib)->biSize)
  72. #define DibSize(pdib)           ((pdib)->biSize                         \
  73.                                  + DibSizeImage(pdib)                   \
  74.                                  + DibSizeColors(pdib))
  75.  
  76. #define DibFlipY(lpbi, y)       ((int)(lpbi)->biHeight-1-(y))
  77.  
  78. //HACK for NT BI_BITFIELDS DIBs
  79. #ifdef WIN32
  80.     #define DibPtr(lpbi)        ((lpbi)->biCompression == BI_BITFIELDS  \
  81.                                  ? (HPBYTE)(DibColors(lpbi) + 3)        \
  82.                                  : (HPBYTE)(DibColors(lpbi)             \
  83.                                  + (UINT)(lpbi)->biClrUsed))
  84. #else
  85.     #define DibPtr(lpbi)        (HPBYTE)(DibColors(lpbi)                \
  86.                                  + (UINT)(lpbi)->biClrUsed)
  87. #endif
  88.  
  89. #define DibColors(lpbi)         ((RGBQUAD FAR *)((LPBYTE)(lpbi)         \
  90.                                  + (int)(lpbi)->biSize))
  91.  
  92. #define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0                 \
  93.                                  && (lpbi)->biBitCount <= 8             \
  94.                                  ? (int)(1 << (int)(lpbi)->biBitCount)  \
  95.                                  : (int)(lpbi)->biClrUsed)
  96.  
  97. #define DibXYN(lpbi,pb,x,y,n)   (HPBYTE)(                               \
  98.                                 (BYTE HUGE *)(pb) +                     \
  99.                                 (UINT)((UINT)(x) * (UINT)(n) / 8u) +    \
  100.                                 ((DWORD)DibWidthBytesN(lpbi,n)          \
  101.                                 * (DWORD)(UINT)(y)))
  102.  
  103. #define DibXY(lpbi,x,y)         DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
  104.  
  105. #define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)           \
  106.                                     (lpbi)->biSizeImage                 \
  107.                                     = DibSizeImage(lpbi);               \
  108.                                 if ((lpbi)->biClrUsed == 0)             \
  109.                                     (lpbi)->biClrUsed                   \
  110.                                     = DibNumColors(lpbi);               \
  111.                                 if ((lpbi)->biCompression               \
  112.                                     == BI_BITFIELDS                     \
  113.                                     && (lpbi)->biClrUsed == 0)          \
  114.                                     ; // (lpbi)->biClrUsed = 3;
  115.  
  116. #define DibInfo(pDIB)                   ((BITMAPINFO FAR *)(pDIB))
  117.  
  118. #ifndef BI_BITFIELDS
  119.    #define BI_BITFIELDS 3
  120. #endif
  121.  
  122. #ifndef HALFTONE
  123.    #define HALFTONE COLORONCOLOR
  124. #endif
  125.  
  126. #ifdef __cplusplus
  127. }
  128. #endif
  129.  
  130. #endif // _INC_DIBMACRO
  131.