BmpProc.h
上传用户:yffx2008
上传日期:2014-10-12
资源大小:12414k
文件大小:6k
源码类别:

交通/航空行业

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////
  2. /*
  3.   目的:BMP位图处理类。(定义文件)
  4. */
  5. ///////////////////////////////////////////////////////////////////////
  6. #ifndef __BMPPROC_H__
  7. #define __BMPPROC_H__
  8. /* 版本 */
  9. #define BMPPROC_VERSION   0x240
  10. // DIBSCANLINE_WIDTHBYTES 执行DIB扫描行的DWORD对齐操作。宏参数“bits”是
  11. // DIB信息结构中成员biWidth和biBitCount的乘积。宏的结果是经过对齐后一个
  12. // 扫描行所占的字节数。
  13. #define DIBSCANLINE_WIDTHBYTES(bits)    (((bits)+31)/32*4)
  14. // DDBSCANLINE_WIDTHBYTES 执行DDB扫描行的WORD对齐操作。宏参数“bits”是
  15. // DDB信息结构中成员bmWidth和bmBitCount的乘积。宏的结果是经过对齐后一个
  16. // 扫描行所占的字节数。
  17. #define DDBSCANLINE_WIDTHBYTES(bits)    (((bits)+15)/16*2)
  18. /* DIB 文件头标志("BM") */
  19. #define DIB_HEADER_MARKER   ((WORD)('M'<<8)|'B')
  20. // 常用颜色定义
  21. #define CBPCOLOR_BLACK ((COLORREF)RGB(0,0,0))
  22. #define CBPCOLOR_GRAY ((COLORREF)RGB(128,128,128))
  23. #define CBPCOLOR_HIGHGRAY ((COLORREF)RGB(192,192,192))
  24. #define CBPCOLOR_WHITE ((COLORREF)RGB(255,255,255))
  25. #define CBPCOLOR_RED ((COLORREF)RGB(255,0,0))
  26. #define CBPCOLOR_GREEN ((COLORREF)RGB(0,255,0))
  27. #define CBPCOLOR_BLUE ((COLORREF)RGB(0,0,255))
  28. // 注意:类CBmpProc是从CBitmap类公有继承而来的,但最好不要使用类CBitmap
  29. // 中的函数!如果使用了(尤其是读入或创建型的函数),则就不要再使用CBmpProc
  30. // 类中的函数,以免混乱。
  31. class CBmpProc : public CBitmap
  32. {
  33. public:
  34. CBmpProc();
  35. ~CBmpProc();
  36. BOOL Create(int width, int height, WORD nBitCount, const void *lpBits=NULL);
  37. BOOL Create(CSize size, WORD nBitCount, const void *lpBits=NULL);
  38. BOOL CreateCompatible(int width, int height, CDC *pDC=NULL, const void *lpBits=NULL);
  39. BOOL CopyFromObject(CBmpProc& souBmp, CRect *pDesRect=NULL, CRect *pSouRect=NULL);
  40. BOOL CopyFromHbmp(HBITMAP souBmp, CRect *pDesRect=NULL, CRect *pSouRect=NULL);
  41. BOOL CopyTran(CBmpProc& souBmp, COLORREF crColour=CBPCOLOR_WHITE, 
  42. CRect *pDesRect=NULL, CRect *pSouRect=NULL, int mode=0);
  43. BOOL CopyTran(CBmpProc& souBmp, COLORREF crColour=CBPCOLOR_WHITE, 
  44. int x=0, int y=0, CRect *pSouRect=NULL, int mode=0);
  45. BOOL CopyTranCenter(CBmpProc& souBmp, CRect* crArea=NULL, 
  46. COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
  47. BOOL CopyTranTile(CBmpProc& souBmp, CRect* crArea=NULL, 
  48. COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
  49. BOOL LoadFromFile(LPCTSTR lpszPathName);
  50. BOOL LoadFromResourceID(UINT uID, HINSTANCE hInst);
  51. BOOL LoadFromResourceName(LPCTSTR lpResourceName, HINSTANCE hInst);
  52. BOOL LoadFromObject(CBmpProc& souBmp, CRect *pSouRect=NULL);
  53. BOOL LoadFromHbmp(HBITMAP sou, CRect *pSouRect=NULL);
  54. BOOL LoadFromClipboard();
  55. BOOL Save(LPCTSTR lpszNewFileName=NULL, WORD nBitsPerPixel=0);
  56. BOOL SaveToClipboard();
  57. BOOL Draw(CDC& dc, const CRect* rcDst=NULL, const CRect* rcSrc=NULL);
  58. BOOL DrawTile(CDC& dc, CRect* crArea);
  59. BOOL DrawCenter(CDC& dc, CRect* crArea);
  60. BOOL DrawTransparentInRect(CDC& dc, COLORREF crColour=CBPCOLOR_WHITE, 
  61. CRect* crDest=NULL, CRect* crSou=NULL, int mode=0);
  62. BOOL DrawTransparentInPoint(CDC& dc, COLORREF crColour=CBPCOLOR_WHITE, 
  63. int x=0, int y=0, CRect* crSou=NULL, int mode=0);
  64. BOOL DrawTranCenter(CDC& dc, CRect* crArea, COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
  65. BOOL DrawTranTile(CDC& dc, CRect* crArea, COLORREF crColour=CBPCOLOR_WHITE, int mode=0);
  66. BOOL Attach(HBITMAP hBmp);
  67. HBITMAP Detach();
  68. void Clear();
  69. HRGN ExportRegion(COLORREF cTranColor=CBPCOLOR_WHITE);
  70. BOOL Fill(COLORREF crColour=CBPCOLOR_WHITE, CRect *crArea=NULL);
  71. BOOL ReSetColor(COLORREF oldcolr, COLORREF newcolr, CRect *crArea=NULL);
  72.    
  73. // 重载操作符函数
  74. CBmpProc& operator=(const CBmpProc& ds);
  75. CBmpProc& operator=(const HBITMAP sou);
  76. BOOL operator==(const CBmpProc& ds);
  77. BOOL operator!=(const CBmpProc& ds);
  78. operator HBITMAP() const { return (HBITMAP)m_hObject; };
  79. // 类数据访问函数
  80. CSize Size() const;
  81. CRect Rect() const;
  82. int   Width() const;
  83. int   Height() const;
  84. int   ScanWidth() const;
  85. int   BitsPerPixel() const;
  86. BOOL  IsValid() const;
  87. //访问类内部数据的介面函数
  88. int   GetImageType() const;
  89. DWORD GetInAddInfo() const;
  90. const CString& GetFileName() const;
  91. BOOL  SetFileName(LPSTR pSou);
  92. int   GetObject(LPBITMAP lpBitmap) const;
  93. HANDLE GetHDib() const;
  94. WORD GetVersion() const;
  95. #ifdef _DEBUG
  96. static DWORD GetObjectCount() {return m_ObjectCount;};
  97. #endif
  98. protected:
  99. // 助手函数(与类无关)
  100. LPSTR FindDIBBits(LPSTR lpbi) const;
  101. DWORD DIBWidth(LPBITMAPINFOHEADER lpbi) const;
  102. DWORD DIBHeight(LPBITMAPINFOHEADER lpbi) const;
  103. WORD PaletteSize(LPBITMAPINFOHEADER lpbi) const;
  104. WORD DIBNumColors(LPBITMAPINFOHEADER lpbi) const;
  105. int GetBitsPerPixel(LPBITMAPINFOHEADER lpbi) const;
  106. LPVOID CreateMemoryBlockFromHandle(HANDLE handle, DWORD dwCount=0);
  107. LPVOID CreateMemoryBlockFromAddress(LPVOID pSou, DWORD dwCount=0);
  108. BOOL IsValidBmpFile(CFile& file);
  109. LPBITMAPINFO GetBmpFileInfo(CFile& file);
  110. LPSTR GetBmpFileBits(CFile& file);
  111. BOOL IsValidDibFormat(WORD nBitsPerPixel);
  112. BOOL IsFileExist(LPCTSTR lpFileName);
  113. DWORD CalculateDIBFileSize(LPBITMAPINFOHEADER lpbi) const;
  114. DWORD CalculateDIBSize(LPBITMAPINFOHEADER lpbi) const;
  115. DWORD CalculateDIBitsOff(LPBITMAPINFOHEADER lpbi) const;
  116. DWORD CalculateDIBInfoSize(LPBITMAPINFOHEADER lpbi) const;
  117. DWORD CalculateDIBitsSize(LPBITMAPINFOHEADER lpbi) const;
  118. BOOL PasteAvailable();
  119. // 内部服务函数(与类有关)
  120. BOOL SaveBaseSpecifyFileName(LPCTSTR fn);
  121. BOOL SaveBaseSpecifyFormat(WORD nBitsPerPixel);
  122. LPBITMAPINFO GetSpecifyFormatInfo(WORD newBitCount=0);
  123. BOOL ClearAndSetData(int type, DWORD addinfo, LPCTSTR lpFn, LPBITMAPINFO pInfo, HBITMAP hBmp);
  124. public:
  125. enum // 位图的初始来源类型:
  126. {
  127. IT_NULL, // 无位图类型
  128. IT_DISKFILE, // 文件位图
  129. IT_RESOURCE, // 资源位图
  130. IT_MEMORY, // 内存位图
  131. IT_CLIP, // 剪贴板位图
  132. IT_CREATE // 创建型位图
  133. };
  134. private:
  135. // 数据成员
  136. BOOL m_mark; // 类的有效标志。(TRUE-本类中有位图,
  137. // FALSE-本类中没有位图)
  138. int  m_type; // 图像类型,只能使用上面枚举类型值
  139. DWORD   m_addInfo; // 附加信息。
  140. CString m_cFileName;// 文件路径。
  141. LPBITMAPINFO  m_pInfo; // DIB 信息结构
  142. #ifdef _DEBUG
  143. static DWORD m_ObjectCount; // 本类构造的实例目标个数,供调试使用
  144. #endif
  145. };
  146. #endif /*__BMPPROC_H__*/