用于从像素缓冲区到设备上下文的blitting的最快方法

时间:2011-01-18 06:23:46

标签: image winapi bitmap device-context dib

晚上好,

我在内存缓冲区中有几个32位图像,我希望快速将其“blit”到设备上下文。速度是一个问题,因为缓冲区将被不断操作,需要反复进入DC。

缓冲区的颜色深度为32位,因此它已经是DIB预期的SetDIBits()格式。然而,这是相当麻烦的,因为在操作之前不能将SetDIBits()的位图目标选择到DC中。因此,我需要不断更换DC的位图,调用SetDIBits(),将位图交换回DC,然后将DC blit到Window的DC。对我来说,这似乎是CPU上的大量工作量和Windows API中的过多分支;为了获得最佳性能而太过分了。

如果它没有强迫我使用设备上下文进行2D操作,或者在显示纹理之前将纹理上传到视频内存,我会感兴趣使用DirectX,因为图像内容不断变化。

我的问题很简单(尽管篇幅很长)。对于我来说,将图像从内存中的像素缓冲区blit到屏幕上的最快方法是什么?直接访问DC的像素缓冲区会很棒,但我知道这不会发生。

感谢您阅读我的长篇文章。

1 个答案:

答案 0 :(得分:2)

有一种API方法CreateDIBSection可以创建应用程序可以直接写入的DIB。这允许不断更新位图(memcopy或直接写入它)。

有关详细信息,请参阅MSDN文章。

  

必须同步对位图的访问。通过调用GdiFlush函数来执行此操作。