0

したがって、StretchBltは、nWidthSrc/DestおよびnHeightSrc/Destパラメーターを否定することにより、画像を水平方向および/または垂直方向にミラーリングできることを読みました。StretchBltのパフォーマンスオーバーヘッドのないこの機能が必要です。BitBltで同じ手法を試しましたが、機能しませんでした。

StretchBltを使いすぎずに、BitBltのような単純なもので画像をミラーリングする方法はありますか?または、ソースと宛先のサイズが同じ場合、StretchBltはパフォーマンスに影響しませんか?

4

4 に答える 4

2

BitBlt は、問題の個々のピクセルに対して数学演算 (または xor など) のみを実行し、画像のサイズを変更しません。これこそまさに StretchBlt の目的であり、StretchBlt は (他のグラフィック サイズ変更操作と比較して) 非常に高速です。ほとんどの場合、グラフィック カードを使用してパフォーマンスを加速できるからです。

于 2009-02-16T15:11:02.347 に答える
1

すべてのWin32関数はおそらく非常に最適化されるでしょう。

StretchBltがパフォーマンスに大きな打撃を与えると思う理由は何ですか?

StretchBltを使用してアプリケーションのプロファイルを作成しましたか?

すべてのビットマップデータを自分で逆にして、StretchBltよりもうまくできるかどうかを確認できます。

これがあなたを助けるかもしれないリンクです:

http://www.codeguru.com/cpp/gm/bitmap/specialeffects/article.php/c1739

于 2009-02-16T14:32:58.447 に答える
0

画像をミラーリングするには、ピクセルを逆の順序でループする必要があります。水平方向にミラーリングする場合など、次のことを行う必要があります。

  1. 画像キャンバスを拡大してサイズを2倍にする
  2. 画像の下部から始めて、上から下に向かってミラーリングされた領域にピクセルを書き込みます。
  3. 手順3を左から右に実行します。

使用している言語はわかりませんが、ほとんどの場合、GDIを使用してピクセルまたはビットを個別に操作できます。

于 2009-02-16T14:25:04.127 に答える
0

画像に関する追加情報を知っていない限り、StretchBlt よりも効率的になる方法はありません (たとえば、境界線があるため、特定のピクセルを反転する必要はありません。

于 2009-02-16T14:45:28.510 に答える