2012-10-31 11 views
5

C#Windowsフォームでゲーム用のマップエディタを作成しています。私が必要とするのは、数千枚もの画像を保存しなければならないグリッドです。C#Windowsフォームで大量の画像を描画する

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

は、その後、私はRectanglesを作成し、より良い結果を得るために期待してPanelOnPaint()方法でそれらにImagesを描画しようとすることを決めたが、それはまだ非常に遅いです。

Windowsフォームで非常に多くのイメージをレンダリングする方法はありますか?

アドバイスはありがとうございます。

+0

を引っ張って大きな負荷の時間を持って賭けが同時に画面上に表示されるすべてのものを2000年の画像はありますか? –

+0

はい、そうです。そして、マップ上のある場所から別の場所に移動するのに3秒かかることがないように、それらを非常に速くレンダリングする必要があります。 –

+0

@Mosquito - あなたが望むのは現実的ではありません。なぜ画像を生成してから、どの画像を表示する必要があるのですか?私は、「3秒」はあなたが得るほど速いと主張します。 –

答えて

3

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

画像の読み込みの一環として、唯一の125の画像であるあなたが一つに16枚の画像をマージズームアウトバージョンを、キャッシュし、ときに特定の縮尺でズームアウトし、プリレンダリングされた縮小版を使用します。

いつでも画面上にできるだけ少ない画像を保持するという考えで、複数のズームレベルを好きなだけ行うことができます。だから、あなたは再びそれを4で割ることができます。

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

これをさらに改善するには、使用可能なオプション(パンやズームなど)を知っておくと、ユーザーが次に見る可能性のある画像の一部が限られているため、プレロードしてパフォーマンスを向上させることができます。

あなたが最初にロード時間が増加しますが、私はあなたがすでに2000の画像オフディスク

+0

お返事ありがとうございました。 :-) –

+0

@Mosquito、助けてくれてうれしいです! –

関連する問題