我有一個像素數組,我需要將其轉換爲HBITMAP才能在窗口中顯示它。 我試圖使用CreateDIBitmap(),但我沒有BMP頭。 我試圖根據MSDN文檔手動構建它們,但這不起作用。如何將像素陣列轉換爲HBITMAP
我的代碼下面的樣子
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。 什麼問題以及如何解決?
我不認爲CreateDIBi tmap支持灰度圖像。你可以創建一個256色陰影的調色板,或者你可以將你的圖像轉換成RGB三元組。 – john 2013-04-10 16:04:57
好吧,假設我這樣做:char像素[160 * 120 * 3];比我有RGB圖像。 – DanielHsH 2013-04-10 16:21:27
我設置了bmih.biBitCount = 24;但我仍然無法工作 – DanielHsH 2013-04-10 16:21:56