从现有缓冲区创建HBITMAP

时间:2014-02-21 14:26:38

标签: windows winapi bitmap hbitmap

我有一个充满(DIB)位图数据的现有缓冲区,即宽度x高度x 4字节(RGBA)的大小。我想要做的是将这个位图绘制到屏幕上,但是看看CreateBitmap ... / CreateDIB ...函数,它们似乎没有做我正在寻找的东西。我不想复制内存,我想保留对它的访问权限,所以我可以继续在下一帧写入它(不会因复制数据而受到惩罚)。是否存在这样的方法,或者我是否必须创建新的位图并在其上调用SetDIBits?

2 个答案:

答案 0 :(得分:1)

如果你想要简单的代码,那么你可以使用BITMAP结构并指定它的bmBits来指向你的实际图像数据(RGBA 8-Bit)。

然后你可以使用GDI方法

HBITMAP CreateBitmapIndirect(const BITMAP *pbm);

创建HBITMAP以显示图像到屏幕。

但实际上我认为系统在创建HBITMAP时仍然进行复制,这就是为什么在CreateBitmapIndirect返回后,您可以安全地释放图像数据。

但至少你只需要创建一次缓冲区,并且只要图像的大小没有改变就重复使用它。

我使用此方法显示来自RED相机的原始视频。

答案 1 :(得分:0)

你无法直接将DIB写入设备上下文 - 你必须创建一个位图并复制像素。我知道这很烦人!

看起来this question在接受的答案中有一种简洁的方法。