0

私はWindowsC++でプログラミングしています。画面にDIBを描画するための高速な方法を知りたいです。画像が引き伸ばされている可能性があります。

StretchDIBitsよりも高速で、SetDIBitsToDeviceよりも高速です。StretchBitsよりも高速です。

そして高いストレッチ品質で。

どうもありがとう!

4

2 に答える 2

3

API関数StretchDIBitsはハードウェアを活かすと思います。それ以外はBitBlt/を見てくださいStretchBlt

また、そのルートをたどる場合に検討する可能性のある質問が他にもいくつかあります。StretchDIBits


これらの方法に満足できない場合は、他に何を言うべきかわかりません. CPU ができることは限られています。可能な場合は操作の結果をキャッシュし、必要なものだけを更新していることを確認してください。グラフィックス カードを最大限に活用するには、OpenGLまたはDirectXを調べてください。

于 2009-07-31T03:42:28.147 に答える
0

Windows のソース コードをちらりと見たときの記憶によると、Stretchblt は 1980 年代半ばに夏のインターンによって書かれ、修正されることはありませんでした。同じ非効率的なコードが、Windows のすべてのバージョンに引き継がれています。一部の Windows モバイル デバイスでは、StretchBlt は 2D ハードウェア アクセラレーションを利用しますが、デスクトップ Windows では利用できません。デスクトップ ウィンドウで DirectDraw を使用して、2D ハードウェア アクセラレーションを利用し、高速ブリットを取得します。私のデスクトップ ビデオ ゲーム製品には、メモリ バッファー内のビットをストレッチし、BitBlt を呼び出してそれらをディスプレイにコピーする独自の stretchblt コードがあります。これは、単純に StretchBlt を呼び出すよりもかなり高速です。

StretchBlts の失敗の主な原因は、コードがキャッシュされた/キャッシュされていないメモリの速度に完全に気付かず、画像を引き伸ばすときにキャッシュをスラッシングすることだと私は信じています。

于 2009-07-31T06:10:37.113 に答える