【问题标题】:StretchDIBits seems slow, Is there any API faster?StretchDIBits 似乎很慢,有更快的 API 吗?
【发布时间】:2010-10-25 19:26:32
【问题描述】:

我想在相同大小的 HDC 上绘制一个 dib。 我在用 : des 和 src 大小相同。

   ::StretchDIBits(hdc,
                des.left,des.top,des.right - des.left,des.bottom - des.top,
                src.left, GetHeight() - src.bottom, src.right - src.left,src.bottom - src.top,
                m_pImg->accessPixels(),m_pImg->getInfo(), DIB_RGB_COLORS, SRCCOPY);

但我发现它很慢,因为 des 大小是相同的,我只需要将 dib 复制到 dc 上。 有没有比 StretchDIBits 更快的方法?

就像

StretchBlt (slow)  vs  Bitblt.(faster)
StretchDIBits (slow ) vs ?(faster)

【问题讨论】:

  • 只是为了好奇,m_pImg 的类型是什么?

标签: gdi performance stretchdibits


【解决方案1】:

除了处理拉伸所需的一般性之外,速度差异来自于进行任何必要的颜色转换(即使您的目标尺寸与源尺寸相同)。

如果您只绘制一次图像,那么我认为您正在寻找的功能是SetDIBitsToDevice

如果您因为多次绘制相同的 DIB 而关心速度,那么您可以通过将 DIB 复制到兼容的内存 DC 一次来提高性能,然后将内存 DC 中的 BitBlt-ing 复制到屏幕上(或打印机)每次需要时。使用CreateCompatibleDC创建内存DC,然后使用StretchDIBitsSetDIBitsToDevice获取上面的图像。之后就可以直接使用BitBlt了。您还可以考虑使用DIBSECTION,它可以在真正的 DIB 和兼容的 DC 之间折衷。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多