2009-05-13 91 views
5

同じサイズのHDCにジブを描きたい。 私は以下を使用しています: desとsrcは同じサイズです。StretchDIBitsが遅いですが、より速いAPIはありますか?

::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); 

しかし、私はそれが遅いので、サイズが同じであるため、dcをdcにコピーするだけで済みます。 StretchDIBitsよりも速い方法はありますか?ただ

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

好奇心のためだけに、m_pImgのタイプは何ですか? – Pumkko

答えて

8

として

速度差がストレッチを処理するために必要な一般性(ターゲットサイズがソースのサイズと同じであっても)に加えて、任意の必要な色変換を行うことから来ています。

画像を1回だけ描​​画する場合、探している機能はSetDIBitsToDeviceだと思います。

同じDIBを複数回描画しているのでスピードが気になる場合は、DIBを互換性のあるメモリDCに1回コピーした後、BitBltをメモリDCから画面にコピーすることでパフォーマンスを向上させることができますまたはプリンタ)を使用する必要があります。メモリDCを作成するのにCreateCompatibleDCを使用し、StretchDIBitsまたはSetDIBitsToDeviceを使用して画像を取得します。その後、BitBltを直接使用することができます。真のDIBと互換性のあるDCとの間のパフォーマンスの低下をもたらすDIBSECTIONを使用することも考えられます。