gpt4 book ai didi

winapi - 从 HBITMAP 获取字节

转载 作者:行者123 更新时间:2023-12-04 22:33:37 29 4
gpt4 key购买 nike

如果给定了 HBITMAP 指针,并且我的应用程序是控制台应用程序,我如何从 hbitmap 获取图像字节。
我尝试使用需要诸如 HDC 之类的参数的 GetDIBits,但我无法获得。

编辑:
我从文件加载位图:

HBITMAP bm = 0; 
BITMAP Bitmap;
bm = (HBITMAP)LoadImage (0, TEXT("C:\\img1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

我将 HBITMAP 传递给函数,并希望获得另一个处理图像的 HBITMAP:
HBITMAP out1 = func(bm);

其中 func 是:
HBITMAP func(HBITMAP im);

问题是如何从 HBITMAP 获取图像字节。

最佳答案

最简单的方法是不是 使用 GetDIBits (也不是 GetBitmapBits )。这些函数很糟糕,因为它们复制数据。
如果你想直接获取数据,只需使用(对于 DDB 位图)

BITMAP bitmap;
GetObject(hBitmap, sizeof(bitmap), (LPVoid)&bitmap);

对于 DIB 位图使用
DIBSECTION dib;
GetObject(hBitmap, sizeof(dib), (LPVOID)&dib);

获取对象信息,见:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd144904%28v=vs.85%29.aspx

这不会涉及任何数据复制,从而避免了与 GetDIBits 相关的复杂问题,请参阅:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd144879%28v=vs.85%29.aspx
特别是底部的评论解释了 GetDIBits 的困难.

请注意,您这样做 不是 获取调色板信息,但由于大多数位图都是 24 位或 32 位,因此大多数情况下这几乎不是问题。

关于winapi - 从 HBITMAP 获取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14207618/

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