?? cdib.h
字號:
//cdib.h 對CDib類中數(shù)據(jù)和函數(shù)進行聲明
#ifndef _INSIDE_VISUAL_CPP_CDIB
#define _INSIDE_VISUAL_CPP_CDIB
class CDib:public CObject
{
public:
enum Alloc{noAlloc,crtAlloc,heapAlloc};//枚舉類型,表示內(nèi)存分配的狀況
DECLARE_SERIAL(CDib)
public:
LPVOID m_lpvColorTable; //顏色表指針
HBITMAP m_hBitmap; //BITMAP結(jié)構(gòu)句柄
LPBYTE m_lpImage; //DIB位圖數(shù)據(jù)塊指針
LPBITMAPINFOHEADER m_lpBMIH; //DIB信息頭指針
HGLOBAL m_hGlobal; //全局的句柄,用于內(nèi)存映射文件中
Alloc m_nBmihAlloc; //表示信息頭內(nèi)存分配的狀況
Alloc m_nImageAlloc; //表示位圖數(shù)據(jù)塊分配的狀況
DWORD m_dwSizeImage; //DIB位圖中的字節(jié)數(shù)(信息頭和調(diào)色板除外)
int m_nColorTableEntries; //調(diào)色板表項數(shù)
HANDLE m_hFile; //文件句柄
HANDLE m_hMap; //內(nèi)存映射文件句柄
LPVOID m_lpvFile; //文件指針
HPALETTE m_hPalette; //調(diào)色板句柄
public:
RGBQUAD GetPixel(int x,int y); //獲取像素真實的顏色值
LONG GetPixelOffset(int x,int y); //獲取像素在圖像數(shù)據(jù)塊中的位置
CSize GetDibSaveDim(); //獲取DIB位圖數(shù)據(jù)塊的存儲尺寸
BOOL IsEmpty(); // 判斷DIB是否為空
WORD PaletteSize(); //計算調(diào)色板的表項數(shù)
CDib(); //構(gòu)造函數(shù)
CDib(CSize size,int nBitCount); //根據(jù)指定的位圖尺寸和像素位數(shù)來構(gòu)造CDib實例
~CDib(); //析構(gòu)函數(shù)
int GetSizeImage(){return m_dwSizeImage;} //獲取DIB位圖中數(shù)據(jù)的字節(jié)數(shù)
int GetSizeHeader() //獲取信息頭和調(diào)色板的尺寸
{return sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*m_nColorTableEntries;}
//獲取以像素表示的DIB的寬度和高度
CSize GetDimensions();
//以讀模式打開內(nèi)存映射文件,并將其與CDib對象進行關(guān)聯(lián)
BOOL AttachMapFile(const char* strPathname,BOOL bShare = FALSE);
//創(chuàng)建一個新的內(nèi)存映射文件,并進行數(shù)據(jù)的復(fù)制
BOOL CopyToMapFile(const char* strPathname);
//用內(nèi)存中的DIB與已有的CDib對象關(guān)聯(lián)
BOOL AttachMemory(LPVOID lpvMem,BOOL bMustDelete = FALSE,HGLOBAL hGlobal = NULL);
//將CDib對象按照指定的尺寸輸出到顯示器
BOOL Draw(CDC* pDC,CPoint origin,CSize size);
//創(chuàng)建一個DIB,圖像內(nèi)存將不被初始化
HBITMAP CreateSection(CDC* pDC = NULL);
//將CDib對象的邏輯調(diào)色板選入設(shè)備上下文,然后實現(xiàn)該調(diào)色板
UINT UsePalette(CDC* pDC,BOOL bBackground = FALSE);
//如果調(diào)色板存在的話,讀取調(diào)色板,并創(chuàng)建一個windows調(diào)色板
BOOL MakePalette();
//設(shè)置系統(tǒng)調(diào)色板
BOOL SetSystemPalette(CDC* pDC);
//拷貝調(diào)色板
HPALETTE CopyPalette(HPALETTE hPalSrc);
//獲得當(dāng)前正使用的系統(tǒng)調(diào)色板
HPALETTE GetSystemPalette();
//將DIB重新生成為壓縮的或者不壓縮的DIB
BOOL Compress(CDC* pDC, BOOL bCompress = TRUE);
//從已有的DIB中創(chuàng)建GDI位圖
HBITMAP CreateBitmap(CDC* pDC);
//從文件中讀取數(shù)據(jù),并填充文件頭、信息頭、調(diào)色板和位圖數(shù)據(jù)
BOOL Read(CFile* pFile);
//從BMP文件中讀取信息頭,調(diào)用CreateSection分配位圖數(shù)據(jù)內(nèi)存,然后讀入位圖到內(nèi)存。
BOOL ReadSection(CFile* pFile,CDC* pDC = NULL);
//將DIB從CDib對象寫入文件
BOOL Write(CFile* pFile);
//串行化過程
void Serialize(CArchive &ar);
//清空DIB,釋放內(nèi)存并關(guān)閉映射文件
void Empty();
//根據(jù)DDB創(chuàng)建DIB,并和CDib對象相連,實現(xiàn)DDB到DIB的轉(zhuǎn)換
BOOL ConvertDDBToDIB(HBITMAP hBitmap, HPALETTE hPal);
private:
void DetachMapFile(); //斷開映射文件的關(guān)聯(lián)
void ComputeMetrics(); //計算調(diào)色板和位圖的尺寸
void ComputePaletteSize(int nBitCount); //計算調(diào)色板的尺寸
};
#endif // _INSIDE_VISUAL_CPP_CDIB
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -