StretchDIBits似乎很慢,有没有更快的API?

时间:2009-05-13 09:19:35

标签: gdi performance stretchdibits

我想在同一尺寸的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)

1 个答案:

答案 0 :(得分:8)

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

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

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