gpt4 book ai didi

c++ - 显示 32 位位图 - 调色板

转载 作者:行者123 更新时间:2023-11-28 04:00:17 32 4
gpt4 key购买 nike

我在缓冲区(类型 - 长型)中有一个来自 32 位扫描仪的图像数据。

例如buffer[0]对应的像素值为952即[184, 3, 0, 0] <-[R,G,B,A];

我想在屏幕上显示/绘画/绘图;当我试图阅读有关显示位图的内容时,我感到很困惑。我查看了 win32 函数、CBitmap 类、Windows 窗体(图片框)等,我很难理解将此缓冲区数据显示到应用程序窗口的一般想法/方法。

我已经构建了 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 函数、windows 窗体、MFC 等;

3.我也明白BitBlt、createDIBSection、OnPaint等正在被使用?我对这些各种各样的功能和编码平台感到困惑?请给我一个简单的方法。

4.如何创建一个调色板来显示 32 位图像?

谢谢

拉吉
已编辑 尝试实现 DAVE 的方法,有人可以评论我的实现。我无法继续使用 bitblt,因为我没有两个 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);

}

最佳答案

如果您只想在屏幕上绘制它,另一种方法是使用 TinyPTC ( http://sourceforge.net/projects/tinyptc/files/ )。它只有 3 个函数,如果您只想绘制一些像素,则非常简单。

编辑:好像http://www.pixeltoaster.com是 TinyPTC 的延续,可能更受欢迎。

关于c++ - 显示 32 位位图 - 调色板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1101028/

32 4 0
文章推荐: javascript - 如何更改 的内容,因为它是