我想使用GetDIBits
在C ++中加载位图。这是我正在使用的代码:
HBITMAP hBmp = LoadBitmap(hInstance, MAKEINTRESOURCE(id));
BITMAP BM;
GetObject(hBmp, sizeof(BM), &BM);
GLvoid* bits = NULL;
BITMAPINFO bitmap_info;
memset(&bitmap_info, 0, sizeof(bitmap_info));
bitmap_info.bmiHeader.biSize = sizeof(bitmap_info.bmiHeader);
bitmap_info.bmiHeader.biWidth = BM.bmWidth;
bitmap_info.bmiHeader.biHeight = BM.bmHeight;
bitmap_info.bmiHeader.biPlanes = 1;
bitmap_info.bmiHeader.biBitCount = DM_BITSPERPEL;//bits per pixel
bitmap_info.bmiHeader.biCompression = BI_RGB;
GetDIBits(device_context,
hBmp,
0, BM.bmWidth,
bits,
&bitmap_info,
DIB_RGB_COLORS);
但由于某些原因bits
似乎是NULL
。我的代码中有什么问题吗?我之前使用过GetBitmapBits
,bits
当时不是NULL
。
答案 0 :(得分:3)
您遇到的行为完全符合定义:
lpvBits [out]
指向接收位图数据的缓冲区的指针。如果这个参数是 NULL,该函数将位图的尺寸和格式传递给 lpbi参数指向的BITMAPINFO结构。
(资料来源:MSDN)
总而言之,如果希望GetDIBits()
填写位,则必须提供非零指针。您有责任分配所需的内存。