문제

I want to use GetDIBits to load a bitmap in C++. Here's the code I'm using:

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);

But it seems that bits is NULL for some reason. Is there something wrong in my code? I used GetBitmapBits before, bits wasn't NULL then.

도움이 되었습니까?

해결책

The behaviour you are encountering is exactly as defined:

lpvBits [out]

A pointer to a buffer to receive the bitmap data. If this parameter is NULL, the function passes the dimensions and format of the bitmap to the BITMAPINFO structure pointed to by the lpbi parameter.

(Source: MSDN)

To summarize, you have to provide a non-zero pointer if you want GetDIBits() to fill in the bits. It is your responsibility to allocate the required memory.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top