Dib.h
上传用户:aqingfeng
上传日期:2014-03-25
资源大小:1839k
文件大小:3k
源码类别:

波变换

开发平台:

Visual C++

  1. // Dib.h: interface for the CDib class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_DIB_H__6A3A31A4_01A0_4B0D_8F20_BC19B6400BD6__INCLUDED_)
  5. #define AFX_DIB_H__6A3A31A4_01A0_4B0D_8F20_BC19B6400BD6__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. class CDib : public CObject  
  10. {
  11. public:
  12. CDib();
  13. virtual ~CDib();
  14. public:
  15. enum Alloc {noAlloc, crtAlloc, heapAlloc}; // 枚举类型,表示内存分配的状况
  16. DECLARE_SERIAL(CDib)
  17. public:
  18. LPVOID m_lpvColorTable; // 调色板指针
  19. HBITMAP m_hBitmap; // BITMAP结构指针
  20. LPBYTE m_lpImage; // DIB位图数据块地址
  21. LPBITMAPINFOHEADER m_lpBMIH; // DIB信息头指针
  22. HGLOBAL m_hGlobal; // 全局的句柄,用于内存映射文件中                    
  23. Alloc m_nBmihAlloc; // 表示信息头内存分配的状况
  24. Alloc m_nImageAlloc; // 表示位图数据分配的状况
  25. DWORD m_dwSizeImage; // DIB位图中的字节数(信息头和调色板数据除外)
  26. int m_nColorTableEntries; // 调色板表项数
  27. HANDLE m_hFile; // 文件句柄
  28. HANDLE m_hMap; // 内存映射文件句柄
  29. LPVOID m_lpvFile; // 文件句柄
  30. HPALETTE m_hPalette; // 调色板句柄
  31. public:
  32. RGBQUAD GetPixel(int x, int y); // 获取象素真实的颜色值
  33. LONG GetPixelOffset(int  x, int y); // 获取象素在图象数据块中的位置
  34. CSize GetDibSaveDim(); // 获取DIB位图数据块的存储尺寸
  35. BOOL IsEmpty(); // 判断DIB是否为空
  36. WORD PaletteSize(); // 计算调色板的表项数
  37. CDib(CSize size, int nBitCount); // 根据指定的位图尺寸和象素位数来构造CDib实例
  38. int GetSizeImage() {return m_dwSizeImage;} // 获取DIB位图中数据的字节数
  39. int GetSizeHeader() // 获取信息头和调色板的尺寸
  40. {return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;}
  41. CSize GetDimensions(); // 获取以象素表示的DIB的宽度和高度
  42. // 将CDib对象按照指定的尺寸输出到显示器(或者打印机)
  43. BOOL Draw(CDC* pDC, CPoint origin, CSize size);  // until we implemnt CreateDibSection
  44. // 将CDib对象的逻辑调色板选入设备上下文,然后实现该调色板
  45. UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE);
  46.     BOOL MakePalette();
  47. BOOL SetSystemPalette(CDC* pDC);
  48. // 从以后的DIB中创建DDB位图,实现DIB到DDB的转换
  49. HBITMAP CreateBitmap(CDC* pDC);
  50. // 从DDB中创建DIB,实现DDB到DIB的转换
  51. BOOL ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
  52. // 从文件中读取数据,并填充文件头、信息头、调色板和位图数据
  53. BOOL Read(CFile* pFile);
  54. // 将DIB从CDib对象写入文件
  55. BOOL Write(CFile* pFile);
  56. // 串行化过程
  57. void Serialize(CArchive& ar);
  58. // 清空DIB,释放已经分配的内存,并且关闭映射文件
  59. void Empty();
  60. // 计算调色板的尺寸
  61. void ComputePaletteSize(int nBitCount);
  62. private:
  63. // 断开映射文件的关联
  64. void DetachMapFile();
  65. // 计算调色板和位图尺寸
  66. void ComputeMetrics();
  67. };
  68. #endif // !defined(AFX_DIB_H__6A3A31A4_01A0_4B0D_8F20_BC19B6400BD6__INCLUDED_)