3

晚上好,

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

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

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

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

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

4

1 回答 1

2

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

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

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

于 2011-01-18T09:13:54.800 回答