home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Jumpstart 1.1a / CD_ROM.BIN / develpmt / source / trans / dib.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-10  |  4.8 KB  |  102 lines

  1. /*----------------------------------------------------------------------------*\
  2. |   Routines for dealing with Device independent bitmaps                       |
  3. |                                           |
  4. |   History:                                                                   |
  5. |       06/23/89 toddla     Created                                            |
  6. |                                                                              |
  7. \*----------------------------------------------------------------------------*/
  8.  
  9. typedef     LPBITMAPINFOHEADER PDIB;
  10. typedef     HANDLE             HDIB;
  11.  
  12. PDIB        DibOpenFile(LPSTR szFile);
  13. BOOL        DibWriteFile(PDIB pdib, LPSTR szFile);
  14. PDIB        DibReadBitmapInfo(HFILE fh);
  15. HPALETTE    DibCreatePalette(PDIB pdib);
  16. BOOL        DibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
  17. BOOL        DibDraw(HDC hdc, int x, int y, int dx, int dy, PDIB pdib, int x0, int y0, int dx0, int dy0, LONG rop, UINT wUsage);
  18. PDIB        DibCreate(int bits, int dx, int dy);
  19. PDIB        DibCopy(PDIB pdib);
  20. void        DibMapToPalette(PDIB pdib, HPALETTE hpal);  
  21. PDIB         DibConvert(PDIB pdib, int BitCount, DWORD biCompression);
  22.  
  23. PDIB        DibFromBitmap(HBITMAP hbm, DWORD biStyle, UINT biBits, HPALETTE hpal, UINT wUsage);
  24. HBITMAP     BitmapFromDib(PDIB pdib, HPALETTE hpal, UINT wUsage);
  25.  
  26. void        MakeIdentityPalette(HPALETTE hpal); 
  27. HPALETTE    CopyPalette(HPALETTE hpal);
  28.  
  29. /****************************************************************************
  30.  DIB macros.
  31.  ***************************************************************************/
  32.  
  33. #ifdef  WIN32
  34.     #define HandleFromDib(lpbi) GlobalHandle(lpbi)
  35. #else
  36.     #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
  37. #endif
  38.  
  39. #define DibFromHandle(h)        (PDIB)GlobalLock(h)
  40.  
  41. #define DibFree(pdib)           GlobalFreePtr(pdib)
  42.  
  43. #define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */
  44.  
  45. #define DibWidth(lpbi)          (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
  46. #define DibHeight(lpbi)         (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
  47. #define DibBitCount(lpbi)       (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
  48. #define DibCompression(lpbi)    (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
  49.  
  50. #define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
  51. #define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount)
  52.  
  53. #define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 \
  54.                                     ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
  55.                                     : (lpbi)->biSizeImage)
  56.  
  57. #define DibSize(lpbi)           ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
  58. #define DibPaletteSize(lpbi)    (DibNumColors(lpbi) * sizeof(RGBQUAD))
  59.  
  60. #define DibFlipY(lpbi, y)       ((int)(lpbi)->biHeight-1-(y))
  61.  
  62. //HACK for NT BI_BITFIELDS DIBs
  63. #ifdef WIN32
  64.     #define DibPtr(lpbi)            ((lpbi)->biCompression == BI_BITFIELDS \
  65.                                        ? (LPVOID)(DibColors(lpbi) + 3) \
  66.                                        : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
  67. #else
  68.     #define DibPtr(lpbi)            (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
  69. #endif
  70.  
  71. #define DibColors(lpbi)         ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
  72.  
  73. #define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
  74.                                     ? (int)(1 << (int)(lpbi)->biBitCount)          \
  75.                                     : (int)(lpbi)->biClrUsed)
  76.  
  77. #define DibXYN(lpbi,pb,x,y,n)   (LPVOID)(                                     \
  78.                                 (BYTE _huge *)(pb) +                          \
  79.                                 (UINT)((UINT)(x) * (UINT)(n) / 8u) +          \
  80.                                 ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
  81.  
  82. #define DibXY(lpbi,x,y)         DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
  83.  
  84. #define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 \
  85.                                     (lpbi)->biSizeImage = DibSizeImage(lpbi); \
  86.                                 if ((lpbi)->biClrUsed == 0)                   \
  87.                                     (lpbi)->biClrUsed = DibNumColors(lpbi);   \
  88.                                 if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0) \
  89.                                     ; // (lpbi)->biClrUsed = 3;                    
  90.  
  91.  
  92. /****************************************************************************
  93.  ***************************************************************************/
  94.  
  95. #ifndef BI_BITFIELDS
  96.     #define BI_BITFIELDS 3
  97. #endif  
  98.  
  99. #ifndef HALFTONE
  100.     #define HALFTONE COLORONCOLOR
  101. #endif
  102.