使用GetDIBits加载位图

时间:2014-04-26 16:50:37

标签: c++ winapi opengl bitmap getdibits

我想使用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。我的代码中有什么问题吗?我之前使用过GetBitmapBitsbits当时不是NULL

1 个答案:

答案 0 :(得分:3)

您遇到的行为完全符合定义:

  

lpvBits [out]

     

指向接收位图数据的缓冲区的指针。如果这个参数是   NULL,该函数将位图的尺寸和格式传递给   lpbi参数指向的BITMAPINFO结构。

(资料来源:MSDN

总而言之,如果希望GetDIBits()填写位,则必须提供非零指针。您有责任分配所需的内存。