【问题标题】:Fastest method for blitting from a pixel buffer into a device context从像素缓冲区到设备上下文的最快方法
【发布时间】:2011-06-10 21:38:26
【问题描述】:

晚上好,

我在内存缓冲区中有几个 32 位图像,我希望快速将它们“blit”到设备上下文中。速度在这里是一个问题,因为缓冲区会被不断地操纵,并且需要重复地被 blitted 到 DC。

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

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

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

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

【问题讨论】:

    标签: image winapi bitmap gdi dib


    【解决方案1】:

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

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

    必须同步对位图的访问。通过调用 GdiFlush 函数来做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2015-07-10
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      相关资源
      最近更新 更多