Generation de picture box supra lente...

Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007 - 18 août 2006 à 20:23
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 20 août 2006 à 15:08
Bonsoir a tous!!

Alors voila j'ai un problème qui commence a me taper sur les nerfs : pour une application j'ai besoin d'afficher toute les images du disque dur dans des picture box de facon a les avoir toute sous les yeux en meme temps. Pour cela j'ai donc une classe qui me permet de créer et d'ajouter une picture box a maform, classe inspirée d'un code trouvé sur ce site (je me souviens plus ou mais c'etait à la base prévu pour des boutons). Le problème c'est que s'il y a qques images tout se passe bien mais si je fais le test avec des centaines d'images plus ou moins grosses, l'ordi rame sévère et finit par planter....Est ce que qqun aurait une solution pour optimiser tout ca ou un bout de code parce que la....Merci d'avance!!!

PiLoU

5 réponses

cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
18 août 2006 à 21:33
C'est normal.


La question qu'il faut se poser est la suivante : Est-ce qu'on est capable de visualiser toutes les images d'un disque dur sur une Form sans utiliser de scroll bars? la réponse est non.


La solution est de charger les adresses (file path) de toutes les images et d'afficher seulement 6 (ou autre nombre) à la fois. Il ne sert à rien d'afficher les 12 440 images en même temps.


Tu peux aussi utiliser les threads pour éviter le plantage.


Bonne continuation

[:D] @++
0
Shogo6 Messages postés 36 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 17 juillet 2007
18 août 2006 à 21:45
Merci de t'interesser à mon pb!!!!Alors en fait j'ai mis sur la form les scrollbar auto donc on px bien voir toute les images ^^
J'ai essayer d'utiliser les thread mais il me sort une lorsque dans le thread je veux affecter l'image à la picturebox : un truc du genre le thread en cours ne peut pas acceder à un objet (ma picturebox) créer depuis un autre thread...Bon j'ai bien penser à la solution d'afficher 6 images a la fois mais a la base l'effet voulut etait un mur d'image miniatures...Enfin je crois qu'au final je vais me tourner vers cette soltuion!!!Merci en tout cas!!

PiLoU
0
cs_badrbadr Messages postés 475 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 3 novembre 2008 1
18 août 2006 à 21:54
De rien,


Pour ton problème de thread, MorpionMx en parle ici dans ce tutorial : http://www.csharpfr.com/tutoriaux/CSHARP-OPERATIONS-CROSS-THREADS-UTILISATION-DELEGATIONS-SYNCHRONES-ASYNCHRONES_174.aspx

Les contrôles WinForms (PictureBox, Button, ...) ne sont pas thread-safe. En d'autres termes, ils ne doivent être manipuler que par le thread qui les a créer. Dans le tutorial, Morpion explique comment acceder à des contrôles d'une manière sécuritaire à partir d'un autre thread.

C'est une lecture interressante.
Bonne chance.

[:D] @++
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
19 août 2006 à 09:35
Salut, la PictureBox c'est sympa pour afficher 1 ou 2 images sur ta forme, mais c'est un contrôle ça prend de la place en mémoire et beaucoup de code est executé à chaque ajout d'une PB dans ta forme. Si tu developpes une application qui manipule beaucoup d'images, faut envisager de dessiner sois même les images directement sur la forme ou sur un Contrôle. Pour les miniatures tu peux utiliser une ListView.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 août 2006 à 15:08
Salut,

Sans parler du fait que le PictureBox est un contrôle, et qu'en tant que contrôle il possède un handle, qui est une ressource limitée.
Si je ne me trompe pas : 65536 par session, 10000 par processus (par défaut, extensible jusque 18000).

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous