4

C# Windows Forms でゲーム用のマップ エディターを作成しています。私が必要としているのは、数千の画像を格納する必要があるグリッドです。

私の最初のアプローチは、Panelコントロールを作成し、それに複数PictureBoxesを追加することでした。残念ながら、2000 枚の画像を描画するのに約 3 秒かかりました。

次に、より良い結果が得られることを期待して、の方法でそれらを作成Rectanglesして描画することにしましたが、それでも非常に遅いです。ImagesPanelOnPaint()

Windows フォームで非常に多くの画像をレンダリングする効率的な方法はありますか?

アドバイスをよろしくお願いします。

4

1 に答える 1

2

行ったようにPaintイベントを使用しますが...

画像の読み込みの一環として、16枚の画像を1つにマージするズームアウトバージョンをキャッシュします。これは125枚の画像のみです。特定のスケールでズームアウトする場合は、事前にレンダリングされたズームアウトバージョンの使用に切り替えます。

いつでも画面に表示される画像をできるだけ少なくするという考えで、複数のズームレベルで何度でもこれを行うことができます。したがって、もう一度4で割ることができます。

これは、65536枚の画像(256 x 256)で構成されるマップを持つプロジェクトに対して行います。キャッシュもディスクに書き込まれるため、ズームアウトするたびに同じ数の画像が表示されます。私の編集者では、地図全体を見ている場合でも、一度に16枚の画像しか表示できません。

ユーザーが利用できるオプション(パンやズームなど)を知ることで、これをさらに改善できます。これにより、ユーザーが次に表示できる可能性のある画像のサブセットが制限されるため、これらをプリロードしてパフォーマンスを向上させることができます。

最初はロード時間が長くなりますが、2000枚のイメージをディスクからプルするのにかなりのロード時間がすでにあると思います

于 2012-10-31T13:44:58.013 に答える