我想使用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。
发布于 2014-04-26 17:11:26
您所遇到的行为与定义完全相同:
lpvBits输出 指向缓冲区的指针,用于接收位图数据。如果此参数为NULL,则函数将位图的尺寸和格式传递给lpbi参数所指向的BITMAPINFO结构。
(资料来源:MSDN)
总之,如果希望GetDIBits()填充比特,则必须提供一个非零指针。分配所需内存是您的责任。
https://stackoverflow.com/questions/23313903
复制相似问题