CSimpleDib(); // 缺省构造函数
CSimpleDib(const CSimpleDib& src); // 拷贝构造函数
CSimpleDib(LPBYTE lpDibMem, LPBYTE lpBits = NULL); // 从内存区域创建对象,lpDibMem – 位图信息头,lpBits – 位图数据阵列头指针,如果lpBits为0,则表示lpBits和头信息是连在一起的,就象一个位图文件。
CSimpleDib& operator = (const LPBYTE lpDibMem); // lpDibMem – 同上
CSimpleDib& operator = (const CSimpleDib& src);
BOOL Create(int cx, int cy, int nBitCount = 24, bool bFillBlack = false); // bFillBlack 为TRUE则在创建后使用黑色填充
void Clear(); // 清除DIB对象数据
int Width(); // 取得位图宽度
int Height(); // 取得位图高度
int BitCount(); // 取得位图色彩位数
int ImageSize(); // 图象数据阵列尺寸,不包括信息头
int GetPitch(); // 每一行数据所占字节数
LPBITMAPINFO GetBitmapInfo(); // 取得信息头指针
const LPBYTE GetBits(); // 取得位图数据阵列头指针
int HeaderSize(LPBITMAPINFO lpbi = NULL) ; // 取得信息头大小
operator HPALETTE(); // 创建调色板,如果已经创建直接返回其句柄
BOOL Load(LPCTSTR lpszPathName); // 从文件中加载 (bmp文件)
BOOL Load(UINT nID, HMODULE hResModule = NULL); // 从资源中加载nID – 资源ID hResModule – 模块句柄 为0表示从进程EXE中加载
BOOL Save(LPCTSTR lpszPathName); // 存储为bmp文件
BOOL Blt(HDC hDC, int x, int y, int cx = -1, int cy = -1, int xSrc = 0, int ySrc = 0); // 将位图绘制到DC上, x,y为DC上的坐标, cx为宽度,cy为高度,xSrc,ySrc为从位图上的(xSrc,ySrc)坐标点开始。该函数不支持缩放
从这里下载源码及使用示例文件http://www.nhvideo.net/codes/SimpleDibDemo.rar
由于Win32的StretchDIBits函数用于缩放有调色板的图象质量有严重问题(当然也可能是我水平的局限),因此封装了一个使用DrawDibDraw函数绘制位图的类CDibDraw,
BOOL CDibDraw::StretchBlt(HDC hDC, int x, int y, int cx, int cy, const CSimpleDib& dib, int xSrc = 0, int ySrc = 0, int cxSrc = -1, int cySrc = -1);
具体用法请参考示例代码。