DIBUTILS.H
上传用户:wep9318
上传日期:2007-01-07
资源大小:893k
文件大小:5k
源码类别:

图片显示

开发平台:

Visual C++

  1. /**************************************************************************
  2.     UTILS.H - useful functions for WinG Sample Apps
  3.  **************************************************************************/
  4. /***************************************************************************
  5.     (C) Copyright 1994 Microsoft Corp.  All rights reserved.
  6.     You have a royalty-free right to use, modify, reproduce and 
  7.     distribute the Sample Files (and/or any modified version) in 
  8.     any way you find useful, provided that you agree that 
  9.  Microsoft has no warranty obligations or liability for any
  10.     Sample Application Files which are modified. 
  11.  **************************************************************************/
  12. /***************************************************************************
  13.     Functions for handling Device Independent Bitmaps and clearing the 
  14.  System Palette.
  15.  **************************************************************************/
  16. #ifndef SAMPLES_UTILS_H  
  17. #define SAMPLES_UTILS_H
  18. typedef     LPBITMAPINFOHEADER PDIB;
  19. typedef     HANDLE             HDIB;
  20. /***************************************************************************
  21.    External function declarations
  22.  **************************************************************************/
  23. void        ClearSystemPalette(void);
  24. PDIB        DibOpenFile(LPSTR szFile);  
  25. int  DibWriteFile(LPSTR szFile, LPBITMAPINFOHEADER lpbi);
  26. // An alternative DIB writing function
  27. BOOL WriteDIB(const char *szFile, LPBITMAPINFOHEADER  lpbi);
  28. BOOL        DibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
  29. PDIB        DibCreate(int bits, int dx, int dy);
  30. BOOL        DibMapToPalette(PDIB pdib, HPALETTE hpal);
  31. HPALETTE MakePalette(const BITMAPINFO FAR* Info, UINT flags);
  32. /****************************************************************************
  33.    Internal function declarations
  34.  ***************************************************************************/
  35. PDIB        DibReadBitmapInfo(HFILE fh);
  36. /****************************************************************************
  37.    DIB macros.
  38.  ***************************************************************************/
  39. #ifdef  WIN32
  40.  #define HandleFromDib(lpbi) GlobalHandle(lpbi)
  41. #else
  42.     #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
  43. #endif
  44. #define DibFromHandle(h)        (PDIB)GlobalLock(h)
  45. #define DibFree(pdib)           GlobalFreePtr(pdib)
  46. #define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */
  47. #define DibWidth(lpbi)          (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
  48. #define DibHeight(lpbi)         (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
  49. #define DibBitCount(lpbi)       (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
  50. #define DibCompression(lpbi)    (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
  51. #define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
  52. #define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount)
  53. #define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 
  54.                                     ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) 
  55.                                     : (lpbi)->biSizeImage)
  56. #define DibSize(lpbi)           ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
  57. #define DibPaletteSize(lpbi)    (DibNumColors(lpbi) * sizeof(RGBQUAD))
  58. #define DibFlipY(lpbi, y)       ((int)(lpbi)->biHeight-1-(y))
  59. //HACK for NT BI_BITFIELDS DIBs
  60. #ifdef WIN32
  61.     #define DibPtr(lpbi)            ((lpbi)->biCompression == BI_BITFIELDS 
  62.                                        ? (LPVOID)(DibColors(lpbi) + 3) 
  63.                                        : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
  64. #else
  65.  #define DibPtr(lpbi)            (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
  66. #endif
  67. #define DibColors(lpbi)         ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
  68. #define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 
  69.                                     ? (int)(1 << (int)(lpbi)->biBitCount)          
  70.                                     : (int)(lpbi)->biClrUsed)
  71. #define DibXYN(lpbi,pb,x,y,n)   (LPVOID)(                                     
  72.                                 (BYTE _huge *)(pb) +                          
  73.                                 (UINT)((UINT)(x) * (UINT)(n) / 8u) +          
  74.                                 ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
  75. #define DibXY(lpbi,x,y)         DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
  76. #define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 
  77. (lpbi)->biSizeImage = DibSizeImage(lpbi); 
  78.                                 if ((lpbi)->biClrUsed == 0)                   
  79.                                     (lpbi)->biClrUsed = DibNumColors(lpbi);   
  80.                                 if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0) 
  81.                                     ; // (lpbi)->biClrUsed = 3;                    
  82. #define DibInfo(pDIB)     ((BITMAPINFO FAR *)(pDIB))
  83. /***************************************************************************/
  84. #ifndef BI_BITFIELDS
  85.   #define BI_BITFIELDS 3
  86. #endif  
  87. #ifndef HALFTONE
  88.   #define HALFTONE COLORONCOLOR
  89. #endif
  90. #endif