ximabmp.h
上传用户:pass2008
上传日期:2021-07-05
资源大小:3299k
文件大小:3k
源码类别:

Internet/IE编程

开发平台:

Visual C++

  1. /*
  2.  * File: ximabmp.h
  3.  * Purpose: BMP Image Class Loader and Writer
  4.  */
  5. /* ==========================================================
  6.  * CxImageBMP (c) 07/Aug/2001 Davide Pizzolato - www.xdp.it
  7.  * For conditions of distribution and use, see copyright notice in ximage.h
  8.  *
  9.  * Special thanks to Troels Knakkergaard for new features, enhancements and bugfixes
  10.  *
  11.  * original CImageBMP  and CImageIterator implementation are:
  12.  * Copyright: (c) 1995, Alejandro Aguilar Sierra <asierra(at)servidor(dot)unam(dot)mx>
  13.  *
  14.  * ==========================================================
  15.  */
  16. #if !defined(__ximaBMP_h)
  17. #define __ximaBMP_h
  18. #include "ximage.h"
  19. const int RLE_COMMAND     = 0;
  20. const int RLE_ENDOFLINE   = 0;
  21. const int RLE_ENDOFBITMAP = 1;
  22. const int RLE_DELTA       = 2;
  23. #if !defined(BI_RLE8)
  24.  #define BI_RLE8  1L
  25. #endif
  26. #if !defined(BI_RLE4)
  27.  #define BI_RLE4  2L
  28. #endif
  29. #if CXIMAGE_SUPPORT_BMP
  30. class CxImageBMP: public CxImage
  31. {
  32. public:
  33. CxImageBMP(): CxImage(CXIMAGE_FORMAT_BMP) {};
  34. bool Decode(CxFile * hFile);
  35. bool Decode(FILE *hFile) { CxIOFile file(hFile); return Decode(&file); }
  36. #if CXIMAGE_SUPPORT_ENCODE
  37. bool Encode(CxFile * hFile);
  38. bool Encode(FILE *hFile) { CxIOFile file(hFile); return Encode(&file); }
  39. #endif // CXIMAGE_SUPPORT_ENCODE
  40. protected:
  41. bool DibReadBitmapInfo(CxFile* fh, BITMAPINFOHEADER *pdib);
  42. };
  43. #define BFT_ICON   0x4349   /* 'IC' */
  44. #define BFT_BITMAP 0x4d42   /* 'BM' */
  45. #define BFT_CURSOR 0x5450   /* 'PT' */
  46. #ifndef WIDTHBYTES
  47. #define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */
  48. #endif
  49. #endif
  50. #define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
  51. #define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount)
  52. #define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 
  53.                                     ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) 
  54.                                     : (lpbi)->biSizeImage)
  55. #define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 
  56.                                     ? (int)(1 << (int)(lpbi)->biBitCount)          
  57.                                     : (int)(lpbi)->biClrUsed)
  58. #define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 
  59. (lpbi)->biSizeImage = DibSizeImage(lpbi); 
  60.                                 if ((lpbi)->biClrUsed == 0)                   
  61.                                     (lpbi)->biClrUsed = DibNumColors(lpbi);   
  62. #endif