8

WriteableBitmapに関する簡単なMSDNの例があります。

これは、マウスが押されてWPF -Image Control上を移動しているときに、1ピクセルを更新するだけで、カーソルを使用してフリーハンドの線を描画する方法を示しています。

 writeableBitmap.Lock();  
 (...set the writeableBitmap.BackBuffers pixel value...)
 writeableBitmap.AddDirtyRect(new Int32Rect(column, row, 1, 1));
 writeableBitmap.Unlock();

今、私はマウスポインタを非常に速く動かしたときの次の動作を理解しようとしています。

画像/ビットマップのサイズが比較的小さい場合(800:600ピクセルなど)、最後に描画されたピクセルは常にマウスポインタの位置と「同期」されます。つまり、遅延がなく、マウスの動きに対する反応が非常に速くなります。

ただし、ビットマップが大きくなる場合(1300:1050ピクセルなど)、遅延が発生する可能性があります。最後に描画されたピクセルは、移動するマウスポインターの後ろに常に少し遅れて表示されます。

したがって、どちらの場合も1つのピクセルのみが「」で更新されるAddDirtyRectため、反応速度はビットマップサイズに依存しないはずです!?ただし、サイズが大きくなると、Writeablebitmapの速度が低下するようです。

writeableBitmap.Unlock();または、メソッドで指定された長方形の領域だけでなく、ビットマップ全体が呼び出しのたびにグラフィックデバイスに転送されAddDirtyRectますか?

フリッツ

4

2 に答える 2

4

.Net 4では、ダーティレクをどこに追加しても、書き込み可能なビットマップは領域全体を無効にします。これは、WindowsSDKv7.1に付属しているWindowsPerformanceToolkitの一部であるPerforatorを使用して確認できます。

これは主要なパフォーマンスのバグです。

于 2010-08-08T19:55:52.487 に答える
4

.Net 3.5のWPFのWriteableBitmapにはバグがあり、AddDirtyRectを呼び出すと、長方形の領域だけでなく、画像全体が無効になります。

.Net4.0で修正されているはずです

http://social.msdn.microsoft.com/Forums/en-US/wpfprerelease/thread/1b84e451-9698-431f-9c51-078825a729b5を参照してください

于 2010-07-27T04:05:58.277 に答える