Как преобразовать массив пикселей в HBITMAP

У меня есть массив пикселей, которые мне нужно преобразовать в HBITMAP, чтобы отобразить его в окне. Я пытался использовать CreateDIBitmap (), но у меня нет заголовков BMP. Я пытался построить их вручную в соответствии с документацией MSDN, но это не сработало.

Вот как выглядит мой код

HBITMAP hBitmap
char pixels[160*120]; // White grayscale image of size 160x120
memset(pixels,255,sizeof(pixels));

BITMAPINFOHEADER bmih;
bmih.biSize     = sizeof(BITMAPINFOHEADER);
bmih.biWidth    = 160;
bmih.biHeight   = -120;
bmih.biPlanes   = 1;
bmih.biBitCount = 8;
bmih.biCompression  = BI_RGB ;
bmih.biSizeImage    = 0;
bmih.biXPelsPerMeter    =   10;
bmih.biYPelsPerMeter    =   10;
bmih.biClrUsed  =0;
bmih.biClrImportant =0;

BITMAPINFO dbmi;
dbmi.bmiHeader = bmih;
dbmi.bmiColors->rgbBlue = 0;
dbmi.bmiColors->rgbGreen = 0;
dbmi.bmiColors->rgbRed = 0;
dbmi.bmiColors->rgbReserved = 0;
void* bits = (void*)&(pixels[0]); 
hBitmap = CreateDIBitmap(localDC, &bmih, CBM_INIT, qB.bmBits, &dbmi, DIB_RGB_COLORS);

Теперь я получаю не NULL hBitmap, который хорош, но показывает всегда черное изображение, как будто оно не указывает на массив пикселей. Я проверил это с помощью кода

BITMAP qB;
GetObject(reinterpret_cast<HGDIOBJ>(hBitmap),sizeof(BITMAP),reinterpret_cast<LPVOID>(&qB));

И действительно, qB.bmBits имеет значение NULL. В чем проблема и как ее исправить?

Ответы на вопрос(2)

Ваш ответ на вопрос