Image 从像素缓冲区到设备上下文的最快闪电扫描方法

Image 从像素缓冲区到设备上下文的最快闪电扫描方法,image,winapi,bitmap,gdi,dib,Image,Winapi,Bitmap,Gdi,Dib,晚上好, 我在内存缓冲区中有几个32位的图像,我希望快速地“blit”到设备上下文。这里的速度是一个问题,因为缓冲区将被不断操纵,并且需要反复地向DC进行快速切换 缓冲区的颜色深度为32位,因此它已经是SetDIBits()的DIB预期格式。但是,这相当麻烦,因为在操作之前无法将SetDIBits()的位图目标选择到DC中。因此,我需要不断交换DC的位图,调用SetDIBits(),将位图交换回DC,然后将DC blit到窗口的DC。在我看来,CPU上的工作量太大,Windows API中的分支

晚上好,

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

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

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

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

感谢您阅读我的长篇大论。

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

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

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