我有一个充满(DIB)位图数据的现有缓冲区,即宽度 x 高度 x 4 字节(RGBA)大小。我想要做的是将此位图绘制到屏幕上,但是查看 CreateBitmap... / CreateDIB... 函数,它们似乎没有做我正在寻找的事情。我不想复制内存,我想保留对它的访问,所以我可以在下一帧继续写入它(不会因复制数据而受到惩罚)。这种方法是否存在,还是我必须创建一个新的位图并在其上调用 SetDIBits?
问问题
1530 次
2 回答
1
如果您想要简单的代码,那么您可以使用 BITMAP 结构并将其分配 bmBits 以指向您的实际图像数据(RGBA 8 位)。
然后你可以使用GDI方法
HBITMAP CreateBitmapIndirect(const BITMAP *pbm);
创建用于将图像显示到屏幕的 HBITMAP。
但实际上我认为系统仍然在创建 HBITMAP 时进行复制,这就是为什么在 CreateBitmapIndirect 返回后,您可以安全地释放图像数据。
但至少你只需要创建一次缓冲区,并且只要图像的大小没有改变就可以重复使用它。
我使用这种方法来显示来自 RED 相机的原始视频。
于 2016-02-25T06:40:04.907 回答
0
您不能将 DIB 直接写入设备上下文 - 您必须创建位图并复制像素。烦人,我知道!
看起来这个问题在接受的答案中有一种简洁的方式。
于 2014-02-21T14:50:56.780 回答