我有一个图像数据在一个缓冲区(类型 - 长)从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