DIBS.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. //ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. //THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright  1994-1997  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  FILE:
  9. //    DIBS.C
  10. //
  11. //  PURPOSE:
  12. //    Include file for DIBS.H
  13. //
  14. //  PLATFORMS:
  15. //    Windows 95, Windows NT
  16. //
  17. //  SPECIAL INSTRUCTIONS: N/A
  18. //
  19. #include <math.h>
  20. //
  21. // General pre-processor macros
  22. //
  23. // Calculates fixed poit from floating point.
  24. #define __FXPTMANTISSA(d, f)  ( (DWORD)d << f )
  25. #define __FXPTFRACTION(d, f)  ( (DWORD)ldexp((d - (DWORD)d), f) )
  26. #define __FXPT32(d, f)      ( __FXPTMANTISSA(d, f) | __FXPTFRACTION(d, f) )
  27. #define __FXPT2DOT30(d)   __FXPT32(d, 30)
  28. #define __FXPT16DOT16(d)  __FXPT32(d, 16)
  29. // Max number of color bits that will have a full color table.
  30. #define MAX_BPP_COLOR_TABLE             8
  31. // Macro to swap two values
  32. #define SWAP(x,y)   ((x)^=(y)^=(x)^=(y))
  33. #define ABS(x)          (((x) >= 0) ? (x) : (-(x)))
  34. #define PALVERSION      0x300
  35. #define MAXPALETTE      256     // max. # supported palette entries
  36. #define RECTWIDTH(lpRect)     ((lpRect)->right - (lpRect)->left)
  37. #define RECTHEIGHT(lpRect)    ((lpRect)->bottom - (lpRect)->top)
  38. // Header signatutes for various resources
  39. #define BFT_BITMAP 0x4d42   // 'BM'
  40. // Intent flag to indicate to use what ever the bitmap header intent is.
  41. #define USE_BITMAP_INTENT       0xffffffff
  42. // macro to determine if resource is a DIB
  43. #define ISDIB(bft) ((bft) == BFT_BITMAP)
  44. // Universial macros to find bitmap's width and height.
  45. #define BITMAPWIDTH(lpbi)           (*(LPDWORD)lpbi >= sizeof(BITMAPINFOHEADER) ? lpbi->biWidth :  
  46.                                     ((LPBITMAPCOREHEADER)lpbi)->bcWidth)
  47. #define BITMAPHEIGHT(lpbi)          (*(LPDWORD)lpbi >= sizeof(BITMAPINFOHEADER) ? lpbi->biHeight :  
  48.                                     ((LPBITMAPCOREHEADER)lpbi)->bcHeight)
  49. #define BITMAPCOMPRESSION(lpbi)     (*(LPDWORD)lpbi >= sizeof(BITMAPINFOHEADER) ? lpbi->biCompression : BI_RGB)
  50. #define BITMAPIMAGESIZE(lpbi)       (*(LPDWORD)lpbi >= sizeof(BITMAPINFOHEADER) ? lpbi->biSizeImage : 0)
  51. #define BITMAPCSTYPE(lpbi)          (*(LPDWORD)lpbi >= sizeof(BITMAPV4HEADER) ? ((PBITMAPV4HEADER)lpbi)->bV4CSType : LCS_sRGB)
  52. #define BITMAPCLRUSED(lpbi)         (*(LPDWORD)lpbi >= sizeof(BITMAPV4HEADER) ? ((PBITMAPV4HEADER)lpbi)->bV4ClrUsed : 0)
  53. #define BITMAPCLRIMPORTANT(lpbi)    (*(LPDWORD)lpbi >= sizeof(BITMAPV4HEADER) ? ((PBITMAPV4HEADER)lpbi)->bV4ClrImportant : 0)
  54. #define BITMAPREDMASK(lpbi)         ( (*(LPDWORD)lpbi >= sizeof(BITMAPV4HEADER)) || (BITMAPCOMPRESSION(lpbi) == BI_BITFIELDS) ?         
  55.                                     ((PBITMAPV4HEADER)lpbi)->bV4RedMask : 0)
  56. #define BITMAPGREENMASK(lpbi)       ( (*(LPDWORD)lpbi >= sizeof(BITMAPV4HEADER)) || (BITMAPCOMPRESSION(lpbi) == BI_BITFIELDS) ?         
  57.                                     ((PBITMAPV4HEADER)lpbi)->bV4GreenMask : 0)
  58. #define BITMAPBLUEMASK(lpbi)        ( (*(LPDWORD)lpbi >= sizeof(BITMAPV4HEADER)) || (BITMAPCOMPRESSION(lpbi) == BI_BITFIELDS) ?         
  59.                                     ((PBITMAPV4HEADER)lpbi)->bV4BlueMask : 0)
  60. #define BITMAPINTENT(lpbi)          (*(LPDWORD)lpbi >= sizeof(BITMAPV5HEADER) ? ((PBITMAPV5HEADER)lpbi)->bV5Intent : LCS_GM_IMAGES)
  61. // Macro to determine bitcount for all bitmap types.
  62. #define BITCOUNT(lpbi)      (*(LPDWORD)lpbi >= sizeof(BITMAPINFOHEADER) ? ((LPBITMAPINFOHEADER)lpbi)->biBitCount :  
  63.                             ((LPBITMAPCOREHEADER)lpbi)->bcBitCount)
  64. // Macro to determine to the DWORD aligned stride of a bitmap.
  65. #define WIDTHBYTES(lpbi)   (((BITMAPWIDTH(lpbi) * BITCOUNT(lpbi) + 31) & ~31) >> 3)
  66. // Macro to calculate size of bitmap.
  67. #define BITMAPSIZE(lpbi)    ( 0 != BITMAPIMAGESIZE(lpbi) ? BITMAPIMAGESIZE(lpbi) : WIDTHBYTES(lpbi) * abs(BITMAPHEIGHT(lpbi)))
  68. // Macros to query Bitmap header version
  69. #define IS_BITMAPCOREHEADER(lpbi) (sizeof(BITMAPCOREHEADER) == *(LPDWORD)lpbi)
  70. #define IS_BITMAPINFOHEADER(lpbi) (sizeof(BITMAPINFOHEADER) == *(LPDWORD)lpbi)
  71. #define IS_BITMAPV4HEADER(lpbi)   (sizeof(BITMAPV4HEADER)   == *(LPDWORD)lpbi)
  72. #define IS_BITMAPV5HEADER(lpbi)   (sizeof(BITMAPV5HEADER)   == *(LPDWORD)lpbi)
  73. // Macro to determine the size of profile data.
  74. #define PROFILESIZE(lpbi)   (*(LPDWORD)lpbi < sizeof(BITMAPV5HEADER) ? 0 :  
  75.                             ((LPBITMAPV5HEADER)lpbi)->bV5ProfileSize)
  76. // Macro to that returns pointer to DIB profile data.
  77. #define GETPROFILEDATA(lpbi)    (IS_BITMAPV5HEADER(lpbi) ? (LPBYTE)lpbi + ((LPBITMAPV5HEADER)lpbi)->bV5ProfileData : NULL)
  78. // Given a pointer to a DIB header, return TRUE if is a Windows 3.0 style
  79. //  DIB, false if otherwise (PM style DIB).  Assume it is a Windows DIB if
  80. // size (the first DWORD) at least eqal to BITMAPINFOHEADER size.
  81. #define IS_WIN30_DIB(lpbi)  ((*(LPDWORD) (lpbi)) >= sizeof (BITMAPINFOHEADER))
  82. // General STRUCTS && TYPEDEFS
  83. // Function prototypes
  84. void      DIBPaint (HDC hDC, LPRECT lpDCRect, HGLOBAL hDIB,LPRECT lpDIBRect, LPDIBINFO lpDIBInfo);
  85. HGLOBAL   ReadDIBFile(LPTSTR lpszFileName);
  86. DWORD     PaletteSize(LPBITMAPINFOHEADER lpbi);
  87. HANDLE    ReadDIBFromFile(HANDLE hFile);
  88. HPALETTE  CreateDIBPalette(HANDLE hDIB);
  89. LPBYTE    FindDIBBits(LPBITMAPINFOHEADER lpbi);
  90. HANDLE    TransformDIBOutsideDC(HANDLE hDIB, BMFORMAT bmInput, LPTSTR lpszDestProfile,
  91.                                 LPTSTR lpszTargetProfile, DWORD dwIntent, PBMCALLBACKFN pBMCallback,
  92.                                 ULONG ulCallbackData);
  93. BOOL      SaveDIBToFile(HWND hWnd, LPCTSTR lpszFileName, LPDIBINFO lpDIBInfo, DWORD dwType);