2016-09-01 16 views
-1

私は大学のプロジェクト(シミュレーション)で、たくさんの線やオブジェクトをカスタムUserControlに描画する必要があります。私の現在のアプローチは、Invalidate()を使ってすべてのチック/更新ループのすべてを再描画することです。しかし、私は数千の線や四角形を描く必要があるときには、描画するのに多くの時間が必要です(これは非常に低いFPSになります)。C#再描画のみフォアグラウンド

更新ループごとに移動する特定の(グループの)オブジェクトを再描画するだけで、必要に応じて残ったもの(めったに更新されないオブジェクト)を再描画できますか?または、私はこの問題を描く方法を最適化する別の方法がありますか?

+0

Google OpenGLとDirectXをご利用ください。 :) – neohope

+0

あなたは何をターゲット設定していますか?Winforms、WPF、ASP ..? __Always__あなたの質問に正しくタグを付けてください! - WinFormsについて[ここをクリック!](http://stackoverflow.com/questions/27623365/existing-graphics-into-bitmap/27647011#27647011) – TaW

+0

@TaW私はwinformsを対象としています。タグが編集されました。リンクありがとう、私はそれを試してみましょう – Myung

答えて

0

私の考えでは、次のようになります。

一度ビットマップ(またはその他のイメージフォーマット)にあなたのコントロールを描画し、その画像を保存します。その後、あなたのコントロールにそのビットマップを表示します。 (これを行うことができるコントロール、つまりImageBoxを使用しているとすれば、それには何が最善であるかはわかりません)。

グラフィックスを更新するときは、コントロールのどのセクションが古くなっているのかを把握し、これらのセクションのみを再描画(そのセクションに接触するオブジェクトのみを描画)し、保存したイメージから他のセクションをコピーします。

新しい画像を表示(および保存)します。