Informations de plusieurs images.

n3v Messages postés 2 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 24 décembre 2010 - 19 déc. 2010 à 20:30
n3v Messages postés 2 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 24 décembre 2010 - 24 déc. 2010 à 19:07
Bonjour à tous !

Je vais essayer de vous exposer mon problème le plus clairement possible.

J'essaye de développer (pour mon apprentissage personnel) une petite application permettant d'afficher et trier des images (rien de bien sorcier en somme).

Je récupère dans la première partie de mon application une liste de fichier (toute des images), que je stock dans une liste. Comme j'ai régulièrement besoin de récupérer des informations telles que le chemin absolu, le nom, l'extension etc, je crée un object List<FileInfo>. (System.IO.FileInfo)
List<FileInfo> pictList = new List<FileInfo>(); //J'instancie une nouvelle liste

List<string> fileList = Directory.GetFiles(@"C:\Users\Tristan\Pictures").ToList(); //je récupère la liste des fichiers du répertoire voulu

foreach (string path in fileList) //Pour chaque fichier.
{
     FileInfo file = new FileInfo(path);
     if ((file.Extension ".PNG") || (file.Extension ".JPG"))
     {
          pictList.Add(file); //Si c'est une image (j'ai simplifié la condition), je l'ajoute à ma liste)
     }
}

Jusque ici, je n'ai aucun, problème. Mais c'est plus tard, lorsque je souhaite récupérer des informations propre aux images que ça se corse un peu.

Pour ça, j'utilise la classe System.Drawing.Image,qui me sert à récupérer les dimensions de mes images (pour les afficher dans une ListView par exemple).

            foreach (FileInfo fichierCourant in PictList) //Pour chaque image de ma liste (stocké sous forme de FileInfo)
            {
                ListViewItem item = new ListViewItem(fichierCourant.Name); //On recupère le nom
                item.SubItems.Add(Image.FromFile(fichierCourant.FullName).Size.ToString()); // Et la taille.

                listView.Items.Add(item); // On l'affiche dans la listView
            }


Tout cela marche très bien, mais pose un sérieux problème d'optimisation. En effet, mes répertoires peuvent contenir quelques milliers d'images, ce qui rend la génération de ma liste terriblement lente (plusieurs minutes pour un dossier de 2000 images).

En gros, ma question est la suivante : Comment optimiser la récupération de toute ces informations (autre classe que Image, autre façon de l'utiliser...j'avoue sécher un peu là) ?

En faite, ce qui me laisse penser qu'il y à plus rapide, c'est que l'explorateur Windows le fait très bien


Merci d'avance pour votre aide,

Nev'.

3 réponses

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
20 déc. 2010 à 09:55
Bonjour,
je pense que l'explorateur prend des informations de ce type :
http://www.codeproject.com/KB/silverlight/Exif_Data.aspx

Bon codage


louis
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
20 déc. 2010 à 15:47
Hello,
Plutôt que de stocker toutes les images du dossier, tu pourrais:
- stocker les vignettes des images
- stocker seulement un certain nombre et tu chargera les suivantes suivant ton besoin (scroll,...)

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
n3v Messages postés 2 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 24 décembre 2010
24 déc. 2010 à 19:07
Salut, et merci à vous deux pour vos réponses ! (désolé pour mon retard, les fêtes ça n'aide pas).

Pour répondre à Louis14 (quel pseudo !), je n'avais effectivement pas pensé aux Exif Data...et ça me parait être une très bonne idée. Je vais de ce pas creuser dans cette direction.

J'avais aussi pensé à calculer les informations au fur et à mesure du scroll, comme le propose Bruno, mais comme j'aimerais dans un second temps, pouvoir appliquer des filtres à mes dossiers d'image, ça ne serait qu'une solution temporaire. (par contre je ne suis pas sur de comprendre la remarque avec les vignettes. Dans mon application, je ne stock jamais l'image en tant que telle, mais uniquement les informations du fichier -le "FileInfo" qui lui correspond-. Je n'utilise la classe Image que temporairement pour récupérer des données propre à l'image).


Joyeux Noël à tous,

Nev'
0
Rejoignez-nous