gpt4 book ai didi

winapi - 从加载到内存中的 24 位 BMP 文件中获取 HBITMAP

转载 作者:行者123 更新时间:2023-12-04 05:08:59 25 4
gpt4 key购买 nike

我有一个 24 位 BMP 文件加载到 RAM 中,我正在尝试为这个图像文件创建一个 HBITMAP。我找到了一些我一直在尝试的例子,但似乎无法奏效。基本上,我需要文件的 HBITMAP,以便我可以卸载文件并保留 HBITMAP,稍后我可以使用 DeleteObject() 处理它。由于此位图很早就在我的应用程序中加载,因此没有应用程序窗口,因此没有 HDC。这就是我到目前为止所拥有的:-

HBITMAP cBitmap;  // This should be where my bitmap handle ends up.
mem; // This is a void* pointer to the loaded BMP file


tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)mem;
tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(mem + sizeof(tagBITMAPFILEHEADER));
RGBQUAD rgb = *(RGBQUAD*)(mem + sizeof(tagBITMAPFILEHEADER) + sizeof(tagBITMAPINFOHEADER));

BITMAPINFO bi;
bi.bmiColors[0] = rgb;
bi.bmiHeader = bih;

UINT8* pixels = mem + bfh.bfOffBits;
void* ppv;
HBITMAP hBitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, &ppv, NULL, 0);
SetDIBits(NULL, hBitmap, 0, bih.biHeight, pixels, &bi, DIB_RGB_COLORS);
GetObject(hBitmap, sizeof(BITMAP), &cBitmap);

出于某种让我感到困惑的原因,cBitmap 最终为 NULL。还有一件让我感到困惑的事情...... DIB_RGB_COLORS 意味着 BITMAPIINFO 有一个指向文字 RGB 值的指针,但是它如何处理没有调色板的 24 位图像?

最佳答案

嗯,不是这样GetObject作品。用法是

GetObject(handle, sizeof(object), &object);

在您的情况下,期望您将其称为
BITMAP bitmap;
GetObject(hBitmap, sizeof(BITMAP), &bitmap);

您没有传递指向 BITMAP 的指针结构,所以行为是未定义的。

你不需要 GetObject根本。您已经拥有 HBITMAP .它在 hBitmap变量。
cBitmap = hBitmap;

关于winapi - 从加载到内存中的 24 位 BMP 文件中获取 HBITMAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com