Dib.h
上传用户:elida16851
上传日期:2022-08-05
资源大小:2048k
文件大小:4k
源码类别:

图形图象

开发平台:

Visual C++

  1. #if !defined(AFX_DIB_H__33817561_072D_11D1_8C94_000021003EA5__INCLUDED_)
  2. #define AFX_DIB_H__33817561_072D_11D1_8C94_000021003EA5__INCLUDED_
  3. #if _MSC_VER >= 1000
  4. #pragma once
  5. #endif // _MSC_VER >= 1000
  6. // Dib.h : header file
  7. //
  8. #include "DIBAPI.H"
  9. ////////////////////////////////////////////////////////////////////////////
  10. // CDib
  11. class CDib : public CObject
  12. {                          
  13. DECLARE_SERIAL(CDib)
  14. // Public member function
  15. public: 
  16. // 构造函数
  17. CDib();
  18. // 拷贝构造函数
  19. CDib(CDib& other) 
  20. // 1) 初始化 
  21. m_hDib = NULL;
  22. m_hBitmap   = NULL;
  23. m_pPalette  = NULL;
  24. m_pBitmap   = NULL;
  25. // 2) 检查源对象是否有效 
  26. HDIB hDib = other.GetHandle();
  27. if (! hDib)
  28. return;
  29. LPBYTE lpDIB = (LPBYTE)GlobalLock(hDib);
  30. if (lpDIB == NULL)
  31. {
  32. GlobalUnlock(hDib);
  33. return; 
  34. }
  35. // 3) 创建对象 
  36. Create(lpDIB);
  37. GlobalUnlock(hDib);
  38. // 赋值函数 
  39. CDib& operator =(CDib& other) 
  40. // 1) 检查自赋值 
  41. if(this == &other) 
  42. return *this; 
  43. // 2) 检查源对象是否有效 
  44. HDIB hDib = other.GetHandle();
  45. if (! hDib)
  46. return *this; 
  47. LPBYTE lpDIB = (LPBYTE)GlobalLock(hDib);
  48. if (lpDIB == NULL)
  49. {
  50. GlobalUnlock(hDib);
  51. return *this; 
  52. }
  53. // 3) 释放原有的内存资源 
  54. Destroy();
  55. m_hBitmap   = NULL;
  56. m_pPalette  = NULL;
  57. m_pBitmap   = NULL;
  58. // 4) 分配新的内存资源,并复制内容 
  59. Create(lpDIB);
  60. GlobalUnlock(hDib);
  61. // 4) 返回本对象的引用 
  62. return *this; 
  63. // create
  64. BOOL Create(DWORD dwWidth, DWORD dwHeight);
  65. BOOL Create(DWORD dwWidth, DWORD dwHeight, WORD wBitCount);
  66. BOOL Create(LPBYTE lpDIB);
  67. BOOL Create(LPBYTE lpDIB, // DIB pointer
  68.    WORD  wBitCount); // bits/pixel 
  69. BOOL Create(HBITMAP hBitmap); // DIBSection
  70. BOOL Create(HBITMAP hBitmap, // DIBSection
  71.    WORD  wBitCount); // bits/pixel 
  72. BOOL Create(HBITMAP hBitmap, // Bitmap handle
  73.    HPALETTE hPalette); // Palette handle
  74. BOOL Create(HBITMAP hBitmap, // Bitmap handle
  75.    HPALETTE hPalette, // Palette handle
  76.    WORD  wBitCount); // bits/pixel 
  77. BOOL Create(CRect rcScreen);
  78. BOOL Create(HWND hWnd, WORD fPrintArea);
  79. BOOL Create(HWND hWnd, CRect rcClientArea);
  80. // load/save
  81.     BOOL Load(UINT uIDS, LPCTSTR lpszDibType);
  82.     BOOL Load(LPCTSTR lpszDibRes, LPCTSTR lpszDibType);
  83.     BOOL Load(LPCTSTR lpszDibFile);
  84.     BOOL Save(LPCTSTR lpszDibFile);
  85. BOOL Read(CFile *pFile);
  86. BOOL Write(CFile *pFile);
  87. // clone
  88. CDib *  Clone();
  89. // deconstructor
  90. virtual ~CDib();
  91. // destroy
  92. void Destroy();
  93. // overlaying Serialize
  94. virtual void Serialize(CArchive &ar);
  95.     
  96. // display
  97. BOOL Display(CDC * pDC, int xDest, int yDest, int nWidthDest, int nHeightDest, 
  98.      int xSrc, int ySrc, DWORD dwRop=SRCCOPY);
  99. BOOL Display(CDC * pDC, int xDest, int yDest, int nWidthDest, int nHeightDest, 
  100.     int xSrc, int ySrc, int nWidthSrc, int nHeightSrc, DWORD dwRop=SRCCOPY);
  101.     BOOL Display(CDC* pDC, int x, int y, DWORD dwRop=SRCCOPY);
  102. BOOL Display(CDC* pDC, CRect rcDest, CRect rcSrc,DWORD dwRop=SRCCOPY);
  103. BOOL DisplayPalette(CDC* pDC, CRect rc);
  104. // DC for modify DIB
  105. CDC* BeginPaint(CDC *pDC);
  106. void EndPaint();
  107. // DDB and palette
  108. BOOL BuildBitmap();
  109. BOOL BuildPalette();
  110. // attributes
  111. BOOL IsEmpty();
  112. DWORD GetCompression();
  113.     WORD GetBitCount();
  114.     LONG GetWidth();
  115.     LONG GetHeight();    
  116. LONG GetWidthBytes();
  117.     WORD GetColorNumber();
  118. WORD GetPaletteSize();
  119.     CBitmap*  GetBitmap();
  120. CPalette* GetPalette();
  121. HANDLE GetHandle();
  122. LPBYTE GetBitsPtr();
  123. COLORREF GetPixel(LONG x, LONG y);
  124. LONG    GetPixelOffset(LONG x, LONG y);
  125. // private member function
  126. private:
  127. BOOL UpdateInternal();
  128. // public member data
  129. public:
  130. HDIB m_hDib;
  131. HBITMAP m_hBitmap; // handle of DIBSection
  132. CPalette*  m_pPalette;
  133. CBitmap* m_pBitmap;
  134. // private member data
  135. private:
  136. // for drawing in DIB
  137. CDC * m_pMemDC;
  138. CBitmap* m_pBitmapTmp;
  139. CPalette* m_pPaletteTmp;
  140. };
  141. /////////////////////////////////////////////////////////////////////////////
  142. //{{AFX_INSERT_LOCATION}}
  143. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  144. #endif // !defined(AFX_DIB_H__33817561_072D_11D1_8C94_000021003EA5__INCLUDED_)