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