0

.NET GDI +ビットマップオブジェクト(または問題がWPFビットマップオブジェクトを簡単にする場合)があり、dx、dy(ピクセル全体)だけ全体をシフトすることが理想的です。理想的には、を使用してそれを実行したいと思います。 NETですが、API呼び出しは問題ありません。適度に大きなビットマップで10,000回呼び出されるため、効率的である必要があります。

DrawImageを使用してソリューションを実装しましたが、速度が遅く、GCが使用された一時オブジェクトをクリーンアップしている間、アプリケーションが数分間停止します。

ScrollDCを使用したバージョンの作業も開始しましたが、これまでのところ、ビットマップのDCで動作させることができませんでした(ビットマップハンドルを使用してAPIビットマップを作成し、互換性のあるDCasnd呼び出しを作成することで動作させることができますScrollDCですが、それをビットマップオブジェクトに戻す必要があります)。

ビットマップをシフトする「インプレース」の方法が必要です。mikej

4

4 に答える 4

0

Graphics.FromImageメソッドを見つけましたか?これにより、ビットマップを直接操作できるようになります。DrawImageで何を使用しているかはわかりませんが、Graphics.DrawImageを使用すると、ビットマップの領域をそれ自体にコピーできます(プロセスにシフトを適用できます)。

または、Graphicsオブジェクトが与えられた場合、Graphics.GetHdc、ScrollDC、およびGraphics.ReleaseHdcを使用できます。

于 2009-08-26T18:15:06.930 に答える
0

ビットマップのスクロールで問題の解決策を書き上げましたが、もっと良い方法がないかどうかはまだわかりません。

于 2009-09-03T10:40:27.797 に答える
0

私の質問が明確ではなかったら申し訳ありません。私がやろうとしているのは、ビットマップをスクロールする、つまりシフト操作を行うことだけです。たとえば、Scroll(B,1,0) のようなメソッドは、ビットマップ B 全体を 1 ピクセル右にシフトします。

DrawImage と ScrollWindowEx API 呼び出しの両方を使用して、約 10 倍高速な合理的な解決策を見つけました。

私はまだ、WPF を使用して何かを高速化する方法を見つけようとしています。

于 2009-09-01T15:59:05.063 に答える