Использование 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 по какой-то причине. Что-то не так в моем коде? я использовал GetBitmapBits до, bits не было NULL затем.

1 ответ

Решение

Поведение, с которым вы сталкиваетесь, точно такое, как определено:

lpvBits [out]

Указатель на буфер для получения растровых данных. Если этот параметр имеет значение NULL, функция передает размеры и формат растрового изображения в структуру BITMAPINFO, на которую указывает параметр lpbi.

(Источник: MSDN)

Подводя итог, вы должны предоставить ненулевой указатель, если вы хотите GetDIBits() заполнить биты. Вы несете ответственность за выделение необходимой памяти.

Другие вопросы по тегам