OVH Cloud OVH Cloud

best practice pour la création d'un composant

2 réponses
Avatar
françois-Xavier Zakrzewski
Bonjour,
je souhaite créer un contrôle affichant des miniatures des images contenues
dans un dossier. Cela n'a rien de vraiment compliqué mais je m'interroge
bient entendu sur la manière de consommer le moins de ressources possible et
d'avoir les meilleures performances
Est-il plus économe de peindre toutes les miniatures directement sur le
contrôle ou de créer un contrôle enfant pour chaque miniature possédant ses
propres méthodes de peinture?
merci d'avance!

2 réponses

Avatar
David Bouchard
Il est pratiquement sur que c'est moins consommateur d'utiliser un seul
contrôle qui lui gère l'affichage de toutes tes images plutôt que plusieurs
contrôles gèrant chacun son image. Par contre, je sais pas qu'est-ce que tu
veux faire à part afficher des miniatures mais tu peux peut-être seulement
créer une classe Image_miniature qui elle contient une seule image à la fois
et quelques informations sur celle-ci et ensuite, ta classe principal qui
possèderait les fonctions de dessins et autres fonctions ainsi qu'une
collection de la classe Image_miniature. En passant, je sais pas si tu
connais la fonction GetThumbnailImage mais elle est très intéressant puisque
celle-ci prend une image standard et la converti en une image miniature que
tu peux ensuites gérer avec une meilleur performance.
Dim image As New bitmap("c:FichierImage.jpg")

Dim Thumbnail As Image

Thumbnail = New bitmap(image.GetThumbnailImage(100, 100, Nothing,
system.IntPtr.Zero))

image.dispose()

En utilisant cette méthode, tu pourrais charger dans ta class
Image_miniature seulement que les miniatures et disposer des grandeurs
originales et ensuite, Sauvegarder dans un fichier temporaire ta collection
d'image à la racine du répertoire qui possède les images et ainsi, accèder à
celui-ci au-lieu de toujours recharger les images à chaque fois à partir des
originals. Une mise à jour serait nécessaire seulement dans le cas ou une
image changerait ou serait ajouter dans le répertoire en question.

Pour ce qui est de la classe possédant la collection d'image, tu pourrait
procéder ainsi pour dessiner les images

Protected Overrides Sub OnPaint(ByVal e As
System.Windows.Forms.PaintEventArgs)

for each thumb as Image_miniature in Collection_Image

e.Graphics.DrawImageUnscaled(thumb , _Position_Thumbnail.X,
_Position_Thumbnail.Y)

next

End Sub

J'utilise DrawImageUnscaled puisque cette méthode est beaucoup plus
performante que DrawImage puisqu'elle n'a pas de traitement à faire sur
l'image avant de l'afficher.

Un dernier point, pour faire encore plus performant, tu pourrais utiliser un
bitmap tampon qui lui te servirait de table à dessin. C'est-a-dire que tu
dessinerait toutes tes images sur la bitmap tampon et ensuite, dans le
OnPaint, tu dessines seulement la bitmap, donc, pas obligé de redessiner à
chaque fois toutes les miniatures mais seulement la bitmap tampon.

J'espère t'avoir aider et si je tu ne comprend pas mes explications, fait
moi signe, je suis pas sur d'être très claire.

David



"françois-Xavier Zakrzewski"
a écrit dans le message
de news:
Bonjour,
je souhaite créer un contrôle affichant des miniatures des images
contenues
dans un dossier. Cela n'a rien de vraiment compliqué mais je m'interroge
bient entendu sur la manière de consommer le moins de ressources possible
et
d'avoir les meilleures performances
Est-il plus économe de peindre toutes les miniatures directement sur le
contrôle ou de créer un contrôle enfant pour chaque miniature possédant
ses
propres méthodes de peinture?
merci d'avance!


Avatar
françois-Xavier Zakrzewski
merci pour cette explication exhausive!

Concernant GDI+ je maîtrise bien mais bon j'espère que ça servira à d'autres
personnes...

A+ fx