?? cdib.h
字號:
// cdib.h 對CDib類中數(shù)據(jù)和函數(shù)進(jìn)行進(jìn)行聲明
#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; // 調(diào)色板指針
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)色板數(shù)據(jù)除外)
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); // 獲取象素真實(shí)的顏色值
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實(shí)例
~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;}
CSize GetDimensions(); // 獲取以象素表示的DIB的寬度和高度
// 以讀模式打開內(nèi)存映射文件,并將其與CDib對象進(jìn)行關(guān)聯(lián)]
BOOL AttachMapFile(const char* strPathname, BOOL bShare = FALSE);
BOOL CopyToMapFile(const char* strPathname); //創(chuàng)建一個新的內(nèi)存映射文件,并進(jìn)行數(shù)據(jù)的復(fù)制
// 用內(nèi)存中的DIB與已有的CDib對象關(guān)聯(lián)
BOOL AttachMemory(LPVOID lpvMem, BOOL bMustDelete = FALSE, HGLOBAL hGlobal = NULL);
// 將CDib對象按照指定的尺寸輸出到顯示器(或者打印機(jī))
BOOL Draw(CDC* pDC, CPoint origin, CSize size); // until we implemnt CreateDibSection
// 創(chuàng)建一個DIB短,圖象內(nèi)存將不被初始化
HBITMAP CreateSection(CDC* pDC = NULL);
// 將CDib對象的邏輯調(diào)色板選入設(shè)備上下文,然后實(shí)現(xiàn)該調(diào)色板
UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE);
// 如果調(diào)色板存在的話,讀取調(diào)色板,并創(chuàng)建一個Windows調(diào)色板
BOOL MakePalette();
// 如果16bpp、24bpp或32bppDIB不舉杯調(diào)色板,則該函數(shù)可以為CDib對象創(chuàng)建一個邏輯調(diào)色板,
// 它與由CreatehalftonePalette函數(shù)返回的調(diào)色板相匹配。如果程序在256色調(diào)色板顯示器上
// 運(yùn)行,而你又沒有調(diào)用SetSystemPalette,那么,你將不具有任何調(diào)色板,只有20中標(biāo)準(zhǔn)的
// Windows顏色出現(xiàn)在DIB中
BOOL SetSystemPalette(CDC* pDC);
// 將DIB重新生成為壓縮的或者不壓縮的DIB。
BOOL Compress(CDC* pDC, BOOL bCompress = TRUE);
// 從以后的DIB中創(chuàng)建DDB位圖,實(shí)現(xiàn)DIB到DDB的轉(zhuǎn)換
HBITMAP CreateBitmap(CDC* pDC);
// 從DDB中創(chuàng)建DIB,實(shí)現(xiàn)DDB到DIB的轉(zhuǎn)換
BOOL ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
// 從文件中讀取數(shù)據(jù),并填充文件頭、信息頭、調(diào)色板和位圖數(shù)據(jù)
BOOL Read(CFile* pFile);
// 從BMP文件中讀取信息頭,調(diào)用CreateDIBSection來分配位圖數(shù)據(jù)內(nèi)存,然后將位圖從該文件讀入剛才分配的內(nèi)存
BOOL ReadSection(CFile* pFile, CDC* pDC = NULL);
// 將DIB從CDib對象寫入文件
BOOL Write(CFile* pFile);
// 串行化過程
void Serialize(CArchive& ar);
// 清空DIB,釋放已經(jīng)分配的內(nèi)存,并且關(guān)閉映射文件
void Empty();
// 計算調(diào)色板的尺寸
void ComputePaletteSize(int nBitCount);
private:
// 斷開映射文件的關(guān)聯(lián)
void DetachMapFile();
// 計算調(diào)色板和位圖尺寸
void ComputeMetrics();
};
#endif // _INSIDE_VISUAL_CPP_CDIB
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -