home *** CD-ROM | disk | FTP | other *** search
/ CD-ROM User 1995 January / CDuser6Jan95.iso / WING / DIB.HP_ / DIB.HP
Text File  |  1994-06-19  |  5KB  |  104 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. PDIB        DibHalftoneDIB(PDIB pdib);
  23.  
  24. PDIB        DibFromBitmap(HBITMAP hbm, DWORD biStyle, UINT biBits, HPALETTE hpal, UINT wUsage);
  25. HBITMAP     BitmapFromDib(PDIB pdib, HPALETTE hpal, UINT wUsage);
  26.  
  27. void        MakeIdentityPalette(HPALETTE hpal); 
  28. HPALETTE    CopyPalette(HPALETTE hpal);
  29.  
  30. /****************************************************************************
  31.  DIB macros.
  32.  ***************************************************************************/
  33.  
  34. #ifdef  WIN32
  35.     #define HandleFromDib(lpbi) GlobalHandle(lpbi)
  36. #else
  37.     #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
  38. #endif
  39.  
  40. #define DibFromHandle(h)        (PDIB)GlobalLock(h)
  41.  
  42. #define DibFree(pdib)           GlobalFreePtr(pdib)
  43.  
  44. #define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */
  45.  
  46. #define DibWidth(lpbi)          (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
  47. #define DibHeight(lpbi)         (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
  48. #define DibBitCount(lpbi)       (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
  49. #define DibCompression(lpbi)    (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
  50.  
  51. #define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
  52. #define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount)
  53.  
  54. #define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 \
  55.                                     ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
  56.                                     : (lpbi)->biSizeImage)
  57.  
  58. #define DibSize(lpbi)           ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
  59. #define DibPaletteSize(lpbi)    (DibNumColors(lpbi) * sizeof(RGBQUAD))
  60.  
  61. #define DibFlipY(lpbi, y)       ((int)(lpbi)->biHeight-1-(y))
  62.  
  63. //HACK for NT BI_BITFIELDS DIBs
  64. #ifdef WIN32
  65.     #define DibPtr(lpbi)            ((lpbi)->biCompression == BI_BITFIELDS \
  66.                                        ? (LPVOID)(DibColors(lpbi) + 3) \
  67.                                        : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
  68. #else
  69.     #define DibPtr(lpbi)            (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
  70. #endif
  71.  
  72. #define DibColors(lpbi)         ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
  73.  
  74. #define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
  75.                                     ? (int)(1 << (int)(lpbi)->biBitCount)          \
  76.                                     : (int)(lpbi)->biClrUsed)
  77.  
  78. #define DibXYN(lpbi,pb,x,y,n)   (LPVOID)(                                     \
  79.                                 (BYTE _huge *)(pb) +                          \
  80.                                 (UINT)((UINT)(x) * (UINT)(n) / 8u) +          \
  81.                                 ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
  82.  
  83. #define DibXY(lpbi,x,y)         DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
  84.  
  85. #define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 \
  86.                                     (lpbi)->biSizeImage = DibSizeImage(lpbi); \
  87.                                 if ((lpbi)->biClrUsed == 0)                   \
  88.                                     (lpbi)->biClrUsed = DibNumColors(lpbi);   \
  89.                                 if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0) \
  90.                                     ; // (lpbi)->biClrUsed = 3;                    
  91.  
  92. #define DibInfo(pDIB)            ((BITMAPINFO FAR *)(pDIB))
  93.  
  94. /****************************************************************************
  95.  ***************************************************************************/
  96.  
  97. #ifndef BI_BITFIELDS
  98.     #define BI_BITFIELDS 3
  99. #endif  
  100.  
  101. #ifndef HALFTONE
  102.     #define HALFTONE COLORONCOLOR
  103. #endif
  104.