5 votes

Dessiner un grand nombre d'images dans C# Windows Forms

Je suis en train de créer un éditeur de cartes pour un jeu en C# Windows Forms. Ce dont j'ai besoin est une grille qui devra stocker même quelques milliers d'images.

Ma première approche a été de créer un contrôle Panel et d'ajouter ensuite plusieurs PictureBoxes à celui-ci. Malheureusement, 2000 images ont pris environ 3 secondes pour être dessinées.

Ensuite, j'ai décidé d'essayer de créer des Rectangles et de dessiner des Images sur eux dans la méthode OnPaint() du Panel en espérant obtenir de meilleurs résultats, mais c'est encore très lent.

Existe-t-il un moyen meilleur et plus efficace de rendre autant d'images dans Windows Forms?

Merci d'avance pour tout conseil.

2voto

James Barrass Points 5022

Utilisez l'événement Paint comme vous l'avez fait mais...

Dans le cadre du chargement des images, mettez en cache une version zoomée où vous fusionnez 16 images en une seule, ce qui ne représente que 125 images, lorsque vous zoomez en dessous d'une certaine échelle, passez à l'utilisation de la version prérendue zoomée.

Vous pouvez le faire aussi souvent que vous le souhaitez pour plusieurs niveaux de zoom avec l'idée de garder le moins d'images possibles à l'écran à tout moment. Ainsi, vous pourriez diviser cela par 4 à nouveau.

Je fais cela pour un projet qui a une carte composée de 65536 images (256 x 256). Le cache est également écrit sur le disque, donc à chaque zoom arrière, vous voyez le même nombre d'images. Dans mon éditeur, je ne peux voir que 16 images à la fois, même si je regarde toute la carte.

Vous pouvez également améliorer cela en connaissant les options disponibles pour l'utilisateur (par exemple, Panoramique et Zoom) cela vous donne un sous-ensemble limité d'images que l'utilisateur pourrait potentiellement voir ensuite, vous pouvez donc les précharger pour améliorer les performances.

Vous augmenterez le temps de chargement initialement mais je parie que vous avez déjà un temps de chargement significatif pour extraire 2000 images du disque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X