【问题标题】:which is the fasted method to draw a large DIB onto Screen in windows这是在 Windows 中将大型 DIB 绘制到屏幕上的最快方法
【发布时间】:2009-07-31 14:10:37
【问题描述】:

我正在使用 Windows C++ 编程。 我想知道在屏幕上绘制 DIB 的禁食方法是什么。 图片可能被拉伸了。

比 StretchDIBits 快,比 SetDIBitsToDevice 快。 比 StretchBits 快。

并具有高拉伸质量。

非常感谢!

【问题讨论】:

    标签: c++ performance stretch dib


    【解决方案1】:

    我认为 API 函数 StretchDIBits 将利用硬件。除此之外,看看BitBlt / StretchBlt

    此外,如果您采取那条路线,您可能会查看一些与StretchDIBits 相关的other questions


    如果您对这些方法不满意,我不知道还能告诉您什么。你的 CPU 只能做这么多。确保您在可以且仅在updating what you need 时缓存操作结果。查看OpenGLDirectX 以充分利用您的显卡。

    【讨论】:

    • 非常感谢! StretchDIBits 是我使用的。我想要一些更快的 API。
    • 其实大部分问题都是我自己问的TT,还是很慢~~
    【解决方案2】:

    当我看到 Windows 源代码时记得,Stretchblt 是 1980 年代中期由一名暑期实习生编写的,但从未得到修复。所有版本的 Windows 都采用了相同的低效代码。在一些 Windows 移动设备上,StretchBlt 将利用 2D 硬件加速,但不能在桌面 Windows 上。在桌面窗口上使用 DirectDraw 以利用 2D 硬件加速并获得快速 blit。在我的桌面视频游戏产品中,我有自己的 Stretchblt 代码,它可以拉伸内存缓冲区中的位,然后调用 BitBlt 将它们复制到显示器,这比简单地调用 StretchBlt 快得多。

    我认为 StretchBlts 失败的主要原因是代码完全忽略了缓存/非缓存内存的速度,并且在拉伸图像时会破坏缓存。

    【讨论】:

    • 我很确定 DirectDraw 早在几年前就被弃用了,除非它是在最新版本的 DirectX 中重新制作的。
    • DirectDraw 是 DirectX 的一个组件,它包括 DirectInput 和 Direct3D。未弃用。
    猜你喜欢
    • 2011-01-24
    • 2013-12-10
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多