Ho una matrice di pixel che ho bisogno di convertire in HBITMAP per visualizzarla in una finestra. Ho provato a utilizzare CreateDIBitmap() ma non ho le intestazioni BMP. Ho provato a costruirli manualmente secondo la documentazione MSDN ma questo non ha funzionato.Come convertire una matrice di pixel in HBITMAP
Ecco come il mio codice è
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);
ora ho un hBitmap non NULL che è buono, ma mostra sempre un'immagine in bianco come se non punta alla matrice di pixel. Ho controllato utilizzando il codice
BITMAP qB;
GetObject(reinterpret_cast<HGDIOBJ>(hBitmap),sizeof(BITMAP),reinterpret_cast<LPVOID>(&qB));
E infatti qB.bmBits è nullo. Qual è il problema e come risolverlo?
Non penso CreateDIBi tmap supporta immagini in scala di grigi. È possibile creare una tavolozza di 256 sfumature di grigio o convertire la propria immagine in tripli RGB. – john
OK, supponiamo di farlo: pixel del carattere [160 * 120 * 3]; di quanto non abbia un'immagine RGB. – DanielHsH
I set bmih.biBitCount = 24; ma non funziona ancora – DanielHsH