So konvertieren Sie ein Array von Pixeln nach HBITMAP

Ich habe eine Reihe von Pixeln, die ich in HBITMAP konvertieren muss, um sie in einem Fenster anzuzeigen. Ich habe versucht, CreateDIBitmap () zu verwenden, habe aber keine BMP-Header. Ich habe versucht, sie manuell gemäß der MSDN-Dokumentation zu erstellen, aber das hat nicht funktioniert.

Hier, wie mein Code aussieht

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

Jetzt erhalte ich eine hBitmap, die nicht NULL ist, aber immer ein schwarzes Bild anzeigt, als ob sie nicht auf das Pixelarray verweist. Ich habe es mit dem Code überprüft

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

Und in der Tat ist qB.bmBits NULL. Was ist das Problem und wie kann es behoben werden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage