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?