我正在用 Windows C++ 编程。我想知道在屏幕上绘制 DIB 的禁食方法是什么。图像可能被拉伸。
比 StretchDIBits 快,比 SetDIBitsToDevice 快。比 StretchBits 更快。
并具有高拉伸质量。
非常感谢!
我正在用 Windows C++ 编程。我想知道在屏幕上绘制 DIB 的禁食方法是什么。图像可能被拉伸。
比 StretchDIBits 快,比 SetDIBitsToDevice 快。比 StretchBits 更快。
并具有高拉伸质量。
非常感谢!
我认为API 功能StretchDIBits
将利用硬件。除此之外,看看BitBlt
/ StretchBlt
。
此外,如果您采取这条路线,您可能会查看其他一些问题。StretchDIBits
如果您对这些方法不满意,我不知道还能告诉您什么。你的 CPU 只能做这么多。确保尽可能缓存操作结果,并且只更新您需要的内容。查看OpenGL或DirectX以充分利用您的显卡。
我记得当我看到 Windows 源代码时,Stretchblt 是由一名暑期实习生在 1980 年代中期编写的,并且从未得到修复。所有版本的 Windows 都采用了相同的低效代码。在一些 Windows 移动设备上,StretchBlt 将利用 2D 硬件加速,但不能在桌面 Windows 上。在桌面窗口上使用 DirectDraw 以利用 2D 硬件加速并获得快速 blit。在我的桌面视频游戏产品中,我有自己的 Stretchblt 代码,它可以拉伸内存缓冲区中的位,然后调用 BitBlt 将它们复制到显示器,这比简单地调用 StretchBlt 快得多。
我认为 StretchBlts 失败的主要原因是代码完全没有注意到缓存/未缓存内存的速度,并且在拉伸图像时会破坏缓存。