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!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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!
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
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"
<franoisXavierZakrzewski@discussions.microsoft.com> a écrit dans le message
de news: 2C594B6E-D9C4-468E-A5E6-C14ACDCDE120@microsoft.com...
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!
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
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!
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
merci pour cette explication exhausive!
Concernant GDI+ je maîtrise bien mais bon j'espère que ça servira à d'autres
personnes...