今日免费次数已满, 请开通会员/明日再来

3

晚上好,

我有几张32位图像在内存缓冲区中,我希望能够快速地将它们“blit”到设备上下文中。由于缓冲区将被不断操作并需要反复blit到DC上,因此速度是一个问题。

缓冲区的颜色深度为32位,因此它已经处于SetDIBits()所期望的DIB格式中。但是,这种方法相当繁琐,因为在操作之前无法将SetDIBits()的位图目标选择到DC中。因此,我将需要不断地交换DC的位图,调用SetDIBits(),将位图交换回DC,然后将DC blit到窗口的DC上。对我来说,这似乎只是CPU上的很多工作量和Windows API中太多的分支;过于繁琐以获得最佳性能。

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

我的问题很简单(尽管写了很长)。对于我将一个像素缓冲区中的图像blit到屏幕上,什么是最快的方法?直接访问DC的像素缓冲区将是很好的,但我知道那不可能发生。

谢谢您读完我长篇大论的内容。

1个回答

2

有一个API方法CreateDIBSection可用于创建一个DIB,应用程序可以直接向其写入。这允许不断更新位图(无论是使用memcopy还是直接写入它)。

有关更多详细信息,请参见MSDN文章。

必须同步访问位图。通过调用GdiFlush函数来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接