?? 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;}
CSize GetDimensions(); // 獲取以象素表示的DIB的寬度和高度
// 以讀模式打開內存映射文件,并將其與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); // until we implemnt CreateDibSection
// 創建一個DIB短,圖象內存將不被初始化
HBITMAP CreateSection(CDC* pDC = NULL);
// 將CDib對象的邏輯調色板選入設備上下文,然后實現該調色板
UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE);
// 如果調色板存在的話,讀取調色板,并創建一個Windows調色板
BOOL MakePalette();
// 如果16bpp、24bpp或32bppDIB不舉杯調色板,則該函數可以為CDib對象創建一個邏輯調色板,
// 它與由CreatehalftonePalette函數返回的調色板相匹配。如果程序在256色調色板顯示器上
// 運行,而你又沒有調用SetSystemPalette,那么,你將不具有任何調色板,只有20中標準的
// Windows顏色出現在DIB中
BOOL SetSystemPalette(CDC* pDC);
// 將DIB重新生成為壓縮的或者不壓縮的DIB。
BOOL Compress(CDC* pDC, BOOL bCompress = TRUE);
// 從以后的DIB中創建DDB位圖,實現DIB到DDB的轉換
HBITMAP CreateBitmap(CDC* pDC);
// 從DDB中創建DIB,實現DDB到DIB的轉換
BOOL ConvertFromDDB(HBITMAP hBitmap, HPALETTE hPal);
// 從文件中讀取數據,并填充文件頭、信息頭、調色板和位圖數據
BOOL Read(CFile* pFile);
// 從BMP文件中讀取信息頭,調用CreateDIBSection來分配位圖數據內存,然后將位圖從該文件讀入剛才分配的內存
BOOL ReadSection(CFile* pFile, CDC* pDC = NULL);
// 將DIB從CDib對象寫入文件
BOOL Write(CFile* pFile);
// 串行化過程
void Serialize(CArchive& ar);
// 清空DIB,釋放已經分配的內存,并且關閉映射文件
void Empty();
// 計算調色板的尺寸
void ComputePaletteSize(int nBitCount);
private:
// 斷開映射文件的關聯
void DetachMapFile();
// 計算調色板和位圖尺寸
void ComputeMetrics();
};
#endif // _INSIDE_VISUAL_CPP_CDIB
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -