Я хочу использовать 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
затем.
Поведение, с которым вы сталкиваетесь, точно такое, как определено:
lpvBits [out]
Указатель на буфер для получения растровых данных. Если этот параметр
NULL, функция передает размеры и формат растрового изображения в
структура BITMAPINFO, на которую указывает параметр lpbi.
(Источник: MSDN)
Подводя итог, вы должны предоставить ненулевой указатель, если вы хотите GetDIBits()
заполнить биты. Вы несете ответственность за выделение необходимой памяти.