6

我想在同样大小的 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)
4

1 回答 1

9

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

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

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

于 2009-05-14T19:57:51.610 回答