DibObject.h
上传用户:xayxjz
上传日期:2022-08-07
资源大小:2188k
文件大小:6k
源码类别:

图形图象

开发平台:

Visual C++

  1. //DibObject.h
  2. #ifndef __DibObject_H__
  3. #define __DibObject_H__
  4. #include "ImageErrors.h"
  5. #include "ImageLoad.h"
  6. #define POPULARITY_PALETTE 0
  7. #define MEDIAN_CUT_PALETTE 1
  8. #define FIXED_PALETTE 2
  9. #define GETRGB555( a, b, c, d ) { WORD *wData = (WORD *) d; a = (unsigned char) ( ( (*wData) & 0x7c00 ) >> 7 ); b = (unsigned char) ( ( (*wData) & 0x03e0 ) >> 2 ); c = (unsigned char) ( ( (*wData) & 0x001f ) << 3 ); }
  10. #define GETRGB565( a, b, c, d ) { WORD *wData = (WORD *) d; a = (unsigned char) ( ( (*wData) & 0xf800 ) >> 8 ); b = (unsigned char) ( ( (*wData) & 0x07e0 ) >> 3 ); c = (unsigned char) ( ( (*wData) & 0x001f ) << 3 ); }
  11. #define GETRGB888( a, b, c, d ) { DWORD *dwData = (DWORD *) d; a = (unsigned char) ( (*dwData) >> 16 ); b = (unsigned char) ( ( (*dwData) & 0x0000ff00 ) >> 8 ); c = (unsigned char) ( (*dwData) & 0x000000ff ); }
  12. #define PUTRGB555( a, b, c, d ) { WORD *wData = (WORD *) d; *wData = ( ( ( (WORD) a & 0x00f8 ) << 7 ) | ( ( (WORD) b & 0x00f8 ) << 2 ) | ( (WORD) c >> 3 ) ); }
  13. #define PUTRGB565( a, b, c, d ) { WORD *wData = (WORD *) d; *wData = ( ( ( (WORD) a & 0x00f8 ) << 8 ) | ( ( (WORD) b & 0x00fc ) << 3 ) | ( (WORD) c >> 3 ) ); }
  14. #define PUTRGB888( a, b, c, d ) { DWORD *dwData = (DWORD *) d; *dwData = ( (DWORD) a << 16 ) | ( (DWORD) b << 8 ) | (DWORD) c; }
  15. #define _RGB(r,g,b) (WORD)(((b)&~7)<<7)|(((g)&~7)<<2)|((r)>>3)
  16. class CDibObject : public CObject
  17. {
  18. DECLARE_DYNCREATE(CDibObject)
  19. public:
  20. //无参构造函数
  21. CDibObject();
  22. //拷贝构造函数
  23. CDibObject(CDibObject* pDibObject);
  24. //有参构造函数
  25. CDibObject( const char *, CDC *pDC = NULL, int nX = -1, int nY = -1 );
  26. //析构函数
  27. ~CDibObject();
  28. //等号操作符重载
  29. void operator= (const CDibObject &DibObject);
  30. //读入图像
  31. BOOL Load( const char *, CDC *pDC = NULL, int nX = -1, int nY = -1 );
  32. //得到最近发生的错误码
  33. int GetLastError( void );
  34. //保存图像
  35. BOOL Save( const char *, int nType = -1 );
  36. //得到宽度(像素单位)
  37. int GetWidth( void );
  38. //得到高度(像素单位)
  39. int GetHeight( void );
  40. //得到每像素颜色位数
  41. int GetNumBits( void );
  42. //得到颜色数
  43. int GetNumColors( void );
  44. //得到调色板
  45. BOOL GetPaletteData( RGBQUAD * );
  46. RGBQUAD *GetPaletteData( void );
  47. //得到文件类型
  48. int GetImageType( const char * );
  49. int GetImageType( void );
  50. //得到图像信息
  51. BOOL GetImageInfo( const char *, int *pnWidth = NULL,
  52.    int *pnHeight = NULL, int *pnPlanes = NULL,
  53.    int *pnBitsPerPixel = NULL, int *pnNumColors = NULL );
  54. //绘制图像
  55. BOOL Draw( CDC *, int x = -1, int y = -1 );
  56. //设置调色板
  57. BOOL SetPalette( CDC * );
  58. //设置调色板类型
  59. void SetPaletteCreationType( int );
  60. //得到调色板类型
  61. int GetPaletteCreationType( void );
  62. //图像是否被载入
  63. BOOL IsLoaded( void );
  64. //扩展名索引
  65. int ExtensionIndex( const char * );
  66. //改变图像格式
  67. BOOL ChangeFormat( int );
  68. //得到调色板字节数
  69. int GetPaletteBytes( void );
  70. //得到位图句柄
  71. HGLOBAL GetDib( void );
  72. //得到调色板指针
  73. CPalette *GetPalette( void );
  74. //对输入的坐标进行调整,看是否超出图像大小
  75. void NormalizeCoordinates( int *, int *, int *, int *, BOOL *bCompleteImage = NULL, BOOL *bLessThanHalf = NULL );
  76. //得到DIB位图内存指针
  77. void *GetDIBPointer( int *nWidthBytes = NULL, int nNewBits = 0, int *nNewWidthBytes = NULL, int nNewWidth = -1 );
  78. //得到逻辑调色板
  79. LOGPALETTE *GetLogPal( void );
  80. //创建逻辑调色板
  81. LOGPALETTE *CreateLogPalette( RGBQUAD *Palette, int NumColors );
  82. //得到最近颜色索引
  83. int GetNearestIndex( unsigned char, unsigned char, unsigned char, RGBQUAD *, int );
  84. //设置质量
  85. void SetQuality( int nQual ){ m_nQuality = nQual; }
  86. //设置宽度
  87. void SetWidth( int nWidth ){ m_nWidth = nWidth; }
  88. //设置高度
  89. void SetHeight( int nHeight ){ m_nHeight = nHeight; }
  90. //设置平面数
  91. void SetPlanes( int nPlanes ){ m_nPlanes = nPlanes; }
  92. //设置平面数
  93. void SetScreenPlanes( int nScreenPlanes ){ m_nScreenPlanes = nScreenPlanes; }
  94. //设置颜色位数
  95. void SetBits( int nBits ){ m_nBits = nBits; }
  96. //设置颜色位数
  97. void SetScreenBits( int nScreenBits ){ m_nScreenBits = nScreenBits; }
  98. //设置颜色数
  99. void SetColors( int nColors ){ m_nColors = nColors; }
  100. //设置图像类型
  101. void SetImageType( int nImageType ){ m_nImageType = nImageType; }
  102. //设置最后错误类型
  103. void SetLastError( int nLastError ){ m_nLastError = nLastError; }
  104. //设置最后错误类型
  105. void SetPaletteBytes( int nPaletteBytes ){ m_nPaletteBytes = nPaletteBytes; }
  106. //设置m_nX
  107. void SetX( int nX ){ m_nX = nX; }
  108. //设置m_nY
  109. void SetY( int nY ){ m_nY = nY; }
  110. //获取m_nPlans值
  111. int GetPlanes( ){ return m_nPlanes; }
  112. //获取m_nScreenPlans值
  113. int GetScreenPlanes( ){ return m_nScreenPlanes; }
  114. //获取m_nScreenBits值
  115. int GetScreenBits( ){ return m_nScreenBits; }
  116. //获取m_nQuality值
  117. int GetQuality( ){ return m_nQuality; }
  118. //获取m_nColors值
  119. int GetColors( ){ return m_nColors; }
  120. //获取m_nX值
  121. int GetX( ){ return m_nX; }
  122. //获取m_nY值
  123. int GetY( ){ return m_nY; }
  124. //处理调色板
  125. void ProcessPalette( void );
  126. //字节宽度
  127. int WidthBytes( int, int );
  128. //设置位图
  129. void SetDib( HGLOBAL hDib ){ m_hDib = hDib; }
  130. //设置逻辑调色板
  131. void SetLogPal( LOGPALETTE *pLogPal ){ m_pLogPal = pLogPal; }
  132. //清除图像
  133. void KillImage( void );
  134. //处理图像头
  135. void ProcessImageHeader( void );
  136. static char *szExtensions[7]; //扩展名
  137. int m_nLastError; //最近错误
  138. int m_nScreenPlanes, m_nScreenBits, m_nPaletteBytes;
  139. //诊断调试函数
  140. #ifdef _DEBUG
  141. virtual void Dump( CDumpContext &dc) const;
  142. virtual void AssertValid() const;
  143. #endif
  144. protected:
  145. //初始化参数
  146. void InitVars( BOOL bFlag = FALSE );
  147. //从位图创建调色板
  148. void CreatePaletteFromDIB( RGBQUAD *, int );
  149. LOGPALETTE *CreatePaletteFromBitmap( int, unsigned char *, int, int, int );
  150. RGBQUAD *MakePopularityPalette( int, unsigned char *, int, int, int );
  151. RGBQUAD *MakeMedianCutPalette( int, unsigned char *, int, int, int );
  152. RGBQUAD *MakeFixedPalette( int );
  153. int m_nWidth, m_nHeight, m_nPlanes, m_nBits, m_nColors, m_nImageType;
  154. int m_nX, m_nY;
  155. int m_nQuality;
  156. int m_nPaletteCreationType;
  157. CPalette m_Palette;
  158. HGLOBAL m_hDib;
  159. public:
  160. char * GetImageName();
  161. void ProcImgHead(void);
  162. char *m_pszFilename;
  163. LOGPALETTE *m_pLogPal;
  164. };
  165. #endif