如果您从磁盘加载文件,它可能是最容易使用的LoadImage()
与LR_LOADFROMFILE
flag.
创建一个HBITMAP
从已经加载到内存中的文件数据中,您可以执行类似于以下操作:
HBITMAP ConvertDibToHBitmap(void* bmpData)
{
HBITMAP hBitmap = NULL;
BOOL success = FALSE;
// NOTE: Assumes the BITMAPFILEHEADER is present (not normally the case for
// an in-memory DIB)
LPBITMAPFILEHEADER bfh = (LPBITMAPFILEHEADER) bmpData;
LPBITMAPINFOHEADER bih = (LPBITMAPINFOHEADER) (bfh + 1);
void *pixels = (char*) (bih + 1); // NOTE: Assumes no color table (i.e., bpp >= 24)
HDC hdc = GetDC(NULL);
if (hdc != NULL) {
hBitmap = CreateCompatibleBitmap(hdc, bih->biWidth, bih->biHeight);
if (hBitmap != NULL) {
HDC hdcMem = CreateCompatibleDC(hdc);
if (hdcMem != NULL) {
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hdcMem, hBitmap);
if (StretchDIBits(hdcMem, 0, 0, bih->biWidth, bih->biHeight,
0, 0, bih->biWidth, bih->biHeight, pixels,
(LPBITMAPINFO) bih, DIB_RGB_COLORS, SRCCOPY) > 0)
success = TRUE;
SelectObject(hdcMem, hOldBitmap);
DeleteDC(hdcMem);
}
}
ReleaseDC(NULL, hdc);
}
if (!success && hBitmap != NULL) {
DeleteObject(hBitmap);
hBitmap = NULL;
}
return hBitmap;
}