📄 cdib.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 + -