有时我们可能需要将内存中HBITMAP位图句柄指向的位图,保存成bmp位图文件。我们可以调用一些GDI函数以及操作文件的函数,来实现这一功能,相关代码如下:
// 保存位图到文件中
BOOL SaveHBitmapToBmpFile( HBITMAP hBmp, LPCTSTR lpfilename, DWORD dwDefaultDpi/* = 32*/)
{
if ( NULL == hBmp || NULL == lpfilename )
{
return FALSE;
}
HDC hdc = NULL; // 设备描述表
int ibits = 0;;
WORD wbitcount = 0; // 当前显示分辨率下每个像素所占字节数
// 位图中每个像素所占字节数,定义调色板大小,位图中像素字节大小,位图文件大小,写入文件字节数
DWORD dwpalettesize=0, dwbmbitssize, dwdibsize, dwwritten;
BITMAP bitmap; // 位图属性结构
BITMAPFILEHEADER bmfhdr; // 位图文件头结构
BITMAPINFOHEADER bi; // 位图信息头结构
LPBITMAPINFOHEADER lpbi; // 指向位图信息头结构
// 定义文件,分配内存句柄,调色板句柄
HANDLE hfile, hdib, hpal, holdpal = NULL;
// 计算位图文件每个像素所占字节数
hdc = CreateDC( _T("DISPLAY"), NULL, NULL, NULL );
ibits = GetDeviceCaps( hdc, BITSPIXEL ) *