2017-06-24 6 views
1

私はパネルをダブルバッファリングすることは基本的にすべての描画がバッファに行われたことを意味し、バッファは描画面に直接コピーされます。
ビットマップに描画してから、Graphics.DrawImageを使用してそのビットマップをパネルに描画します。これにより、ビットマップが保存され、すべての描画操作をやり直さなくてもそのビットマップを更新できます。
これは、パネルのちらつきに関する限り、パネルのダブルバッファリングと同じですか? または、ダブルバッファリングしてすべての図面を再実行する必要がありますか?そうすれば、フリッカーが少なくなりますか?
編集: 私はDrawLineで点をプロットしていますが、点は動的に生成され、プロットしたら点を保存しません。私がダブルバッファーを使用する場合は、私がプロットしたすべてのポイントを保存するためのメモリオーバーヘッドも発生します。フリッカーを最小限に抑えるために、すでにバッファマップを描画しているパネルでダブルバッファリングを実行する必要がありますか?

+0

あなたがちらつく持っていますか? –

+0

@ LasseV.Karlsenはい、私はいくつかのちらつきがあります – Priyank

+1

はい、システムはあなたのコードよりよく知っています。ビットマップを再描画するか描画するかは、描画操作の数によって異なります。私はビットマップで1番目をキャッシュし、最後の100-500の操作を再描画するのが最良だとわかりました。 – TaW

答えて

1

最適な解決策は、描画する内容、操作の回数、関与するピクセルの数、描画面の合計サイズに大きく左右されます。

一般的な例としては、一般的には、システムがダブルバッファリング制御のことを世話を聞かせすることが推奨されたストローク、ポイントの数百人からなる各時にユーザ杭ストローク描画プログラム..

です描く

したがって、Paintイベントで再描画し、ちらつきをなくすために独自のバッファ付きビットマップ描画を実装しないでください。

ちらつきは消えますが、膨大な数の描画操作では、これは遅くなり、遅れが生じます。回避するために

あなたは両方の方法の最善を組み合わせることができ遅れる:彼らはあまりにも多くを得るまで

  • グラフィックスを描画します。 Nの呼び出し後には、描画呼び出し(基本的にはピクセル数)と遅れに気付く前に数百から数万の描画呼び出しを行うことができるかどうかによってシステムの速度に依存します。

  • その後キャッシュあなたがPanel's BackgroundImageとして設定されたビットマップに描画することによって最初N描画呼び出し。 N+1からのすべての図面は、Paintイベントでパネルの表面に描画されます。あなたが2*Nに達したときには、キャッシュ画像の別のバージョンを作成2*N+1で描画表面を始めるなど..

1

ダブルバッファの動作は少し異なります。バッファAを変更している間は、バッファBを使用して描画する必要があります。バッファBの修正を開始すると、Aから読み取られるはずです。

したがって、読み込み中のバッファを書き込まないようにすることです。したがって、外部バッファを使用してそれを描画バッファにコピーすることはダブルバッファと同じではないようです。実際には、読み出し中は外部バッファをコピーしてバッファを書き込むことができます。

関連する問題