⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdib.h

📁 可用的基于小波的spiht算法
💻 H
字号:
//cdib.h 对CDib类中数据和函数进行声明

#ifndef _INSIDE_VISUAL_CPP_CDIB
#define _INSIDE_VISUAL_CPP_CDIB

class CDib:public CObject
{
public:
	enum Alloc{noAlloc,crtAlloc,heapAlloc};//枚举类型,表示内存分配的状况
	DECLARE_SERIAL(CDib)
public:
	LPVOID m_lpvColorTable;                //颜色表指针
	HBITMAP m_hBitmap;                     //BITMAP结构句柄
	LPBYTE m_lpImage;                      //DIB位图数据块指针
	LPBITMAPINFOHEADER m_lpBMIH;           //DIB信息头指针
	HGLOBAL m_hGlobal;                     //全局的句柄,用于内存映射文件中
	Alloc m_nBmihAlloc;                    //表示信息头内存分配的状况
	Alloc m_nImageAlloc;                   //表示位图数据块分配的状况
	DWORD m_dwSizeImage;               //DIB位图中的字节数(信息头和调色板除外)
	
	int m_nColorTableEntries;          //调色板表项数

	HANDLE m_hFile;                    //文件句柄
	HANDLE m_hMap;                     //内存映射文件句柄
	LPVOID m_lpvFile;                  //文件指针
	HPALETTE m_hPalette;               //调色板句柄
public:
	RGBQUAD GetPixel(int x,int y);     //获取像素真实的颜色值
	LONG GetPixelOffset(int x,int y);   //获取像素在图像数据块中的位置
	CSize GetDibSaveDim();              //获取DIB位图数据块的存储尺寸
	BOOL IsEmpty();                     // 判断DIB是否为空
	WORD PaletteSize();                 //计算调色板的表项数
	CDib();                             //构造函数
	CDib(CSize size,int nBitCount);    //根据指定的位图尺寸和像素位数来构造CDib实例

	~CDib();                            //析构函数
	int GetSizeImage(){return m_dwSizeImage;}     //获取DIB位图中数据的字节数
	int GetSizeHeader()                          //获取信息头和调色板的尺寸
	{return sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*m_nColorTableEntries;}

    //获取以像素表示的DIB的宽度和高度
    CSize GetDimensions();    
	
	//以读模式打开内存映射文件,并将其与CDib对象进行关联	
	BOOL AttachMapFile(const char* strPathname,BOOL bShare = FALSE);

	//创建一个新的内存映射文件,并进行数据的复制
	BOOL CopyToMapFile(const char* strPathname);

	//用内存中的DIB与已有的CDib对象关联
	BOOL AttachMemory(LPVOID lpvMem,BOOL bMustDelete = FALSE,HGLOBAL hGlobal = NULL);

	//将CDib对象按照指定的尺寸输出到显示器
	BOOL Draw(CDC* pDC,CPoint origin,CSize size);

	//创建一个DIB,图像内存将不被初始化
	HBITMAP CreateSection(CDC* pDC = NULL);

	//将CDib对象的逻辑调色板选入设备上下文,然后实现该调色板
	UINT UsePalette(CDC* pDC,BOOL bBackground = FALSE);

	//如果调色板存在的话,读取调色板,并创建一个windows调色板
	BOOL MakePalette();

	//设置系统调色板
	BOOL SetSystemPalette(CDC* pDC);

	//拷贝调色板
	HPALETTE CopyPalette(HPALETTE hPalSrc);

	//获得当前正使用的系统调色板
	HPALETTE GetSystemPalette();

	//将DIB重新生成为压缩的或者不压缩的DIB
	BOOL Compress(CDC* pDC, BOOL bCompress = TRUE);

	//从已有的DIB中创建GDI位图
	HBITMAP CreateBitmap(CDC* pDC);

	//从文件中读取数据,并填充文件头、信息头、调色板和位图数据
	BOOL Read(CFile* pFile);

	//从BMP文件中读取信息头,调用CreateSection分配位图数据内存,然后读入位图到内存。
	BOOL ReadSection(CFile* pFile,CDC* pDC = NULL);

	//将DIB从CDib对象写入文件
	BOOL Write(CFile* pFile);

	//串行化过程
	void Serialize(CArchive &ar);

	//清空DIB,释放内存并关闭映射文件
	void Empty();

	//根据DDB创建DIB,并和CDib对象相连,实现DDB到DIB的转换
	BOOL ConvertDDBToDIB(HBITMAP hBitmap, HPALETTE hPal);
	
private:
	void DetachMapFile();     //断开映射文件的关联

	void ComputeMetrics();   //计算调色板和位图的尺寸

	void ComputePaletteSize(int nBitCount);  //计算调色板的尺寸
};
#endif   // _INSIDE_VISUAL_CPP_CDIB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -