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

use*_*749 5 performance gdi stretchdibits

我想画一个相同大小的HDC.我正在使用: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);
Run Code Online (Sandbox Code Playgroud)

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

就像

StretchBlt (slow)  vs  Bitblt.(faster)
StretchDIBits (slow ) vs ?(faster)
Run Code Online (Sandbox Code Playgroud)

Adr*_*thy 8

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

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

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