我有一個圖像數據在一個緩衝區(類型 - 長)從32位掃描儀。例如,緩衝器[0]的對應像素值是952,其是[184,3,0,0] <- [R,G,B,A]; [0124]顯示32位位圖 - 調色板
我想要在屏幕上顯示/繪製/繪製;當我試圖閱讀關於顯示位圖時,我感到困惑。我看了win32函數,CBitmap類,窗體(圖片框)等等,我很難理解在應用程序窗口上顯示緩衝區數據的一般想法/方法。
我已經構建了BITMAPFILEHEADER和BITMAPINFOHEADER;將像素數據存儲在緩衝區中,(unsigned char *)vInBuff,其大小爲vImageSz;
//construct the BMP file Header
vBmfh.bfType = 19778;
vBmfh.bfSize = 54+vImageSz;//size of the whole image
vBmfh.bfReserved2 = 0;
vBmfh.bfReserved1 = 0;
vBmfh.bfOffBits = 54;//offset from where the pixel data can be found
//Construct the BMP info header
vBmih.biSize = 40;//size of header from this point
vBmih.biWidth = 1004;
vBmih.biHeight = 1002;
vBmih.biPlanes = 1;
vBmih.biCompression = BI_RGB;
vBmih.biSizeImage = vBmih.biWidth*vBmih.biHeight*4;
vBmih.biBitCount = 32;
vBmih.biClrUsed = 0;
vBmih.biClrUsed = 0;
1.什麼是我應該做的旁邊來顯示這個?
2我應該用什麼來顯示32位圖?我看到有人使用createwindows函數,窗體,MFC等;
3.我也明白,BitBlt,createDIBSection,OnPaint等正在使用?我很困惑這些各種功能和編碼平臺?請給我一個簡單的方法。
4.如何創建一個調色板來顯示32位圖像?
感謝
拉吉
EDITED試圖實現DAVE的做法,有人可以有人評論我IMPLEMTATION。我無法繼續下去,因爲我沒有兩個HDC,我不知道如何獲得這個HDC?任何幫助,請
DisplayDataToImageOnScreen(unsigned char* vInBuff, int vImageSz) // buffer with pixel data, Size of pixel data
{
unsigned char* vImageBuff = NULL;
HDC hdcMem=CreateCompatibleDC(NULL);
HBITMAP hBitmap = CreateDIBSection(hdcMem,
(BITMAPINFO*)&vBmih,
DIB_RGB_COLORS,
(void **)&vImageBuff,
NULL, 0);
GetDIBits(hdcMem,
hBitmap,
0,
1,
(void**)&vImageBuff,
(BITMAPINFO*)&vBmih,
DIB_RGB_COLORS);
memcpy(vImageBuff,vInBuff,vImageSz);
}
Windows將需要BGRA,而不是RGBA,不是嗎? – 2009-07-08 23:45:36
嗨Ubben我的理解是像素將在內存中表示爲BGRA。 – Raj 2009-07-09 01:30:16
Windows傾向於在小端進行操作,這就是爲什麼它存儲爲BGRA而不是ARGB – 2013-06-05 14:52:34