J'ai un tableau de pixels que j'ai besoin de convertir en HBITMAP pour l'afficher dans une fenêtre. J'ai essayé d'utiliser CreateDIBitmap() mais je n'ai pas les en-têtes BMP. J'ai essayé de les construire manuellement selon la documentation de MSDN mais cela n'a pas fonctionné.Comment convertir un tableau de pixels en HBITMAP
Voici comment mon code ressemble
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);
Maintenant, j'obtenir un hBitmap non NULL qui est bon, mais il montre toujours l'image noire comme si elle ne pointe pas vers la matrice de pixels. Je l'ai vérifié en utilisant le code
BITMAP qB;
GetObject(reinterpret_cast<HGDIOBJ>(hBitmap),sizeof(BITMAP),reinterpret_cast<LPVOID>(&qB));
Et en effet qB.bmBits est NULL. Quel est le problème et comment le résoudre?
Je ne pense pas que CreateDIBi tmap prend en charge les images en niveaux de gris. Vous pouvez créer une palette de 256 nuances de gris ou vous pouvez convertir votre image en triplets RVB. – john
OK, supposons que je le fasse: char pixels [160 * 120 * 3]; que j'ai l'image RVB. – DanielHsH
J'ai défini bmih.biBitCount = 24; mais je ne fonctionne toujours pas – DanielHsH