grosbidou21
Messages postés74Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention 5 février 2010
-
12 févr. 2007 à 11:27
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 2016
-
25 févr. 2007 à 21:06
Bonjour à tous,
Après recherche sur le réseau code sources je ne trouve toujours pas ce que je recherche :
Un générateur de miniatures (thumbnails) qui puisse générer des images supérieur à 160x120 pixels et rapidement!
2 sources sont en VB6 et répondent à mes attentes :
http://www.vbfrance.com/code.aspx?ID=39648 de Renfield
http://www.vbfrance.com/code.aspx?ID=39524 de ShareVB
Mais la traduction en .NET n'est pas correcte et m'annonce plein d'erreur que je suis incapable de corriger...
Si quelqu'un a la solution, je suis preneur!
Merci d'avance
Alain
La programation c'est au moins autant prise de tête que ... je ne vois pas rien ne l'égale...
NHenry
Messages postés15155Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention26 septembre 2024159 12 févr. 2007 à 12:32
Bonjour
En .NET sur un objet de dessin Graphics (Form, Control)
private sub Miniature(byval pGraphics as graphics,byval pFileName as string,byval pDestSize as size,byval pOffset as point)
dim lImage as new Bitmap(pFileName)
pGraphics.DrawImage(lImage,pOffset,pDestSize)
End sub
Code tapé endehors de l'EDI, revérifie la syntaxe.
pGraphics objet sur lequel tu dessine
pFileName fichier image à miniaturisé
pDestSize Taille désirée
pOffset Position du coin en haut à gauche de l'image
Ce code redimmensionne l'image pour prendre exactement la taille
désirée, si l'image n'a pas le même rapport Hauteur/Largeur que désiré
ou est plus petite, elle sera déformée.
Tu peux connaitre la taille de l'image en faisant : lImage.size (en px).
Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
grosbidou21
Messages postés74Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention 5 février 20102 12 févr. 2007 à 13:49
Salut,
Malheureusement ça ne répond pas à ma question!
Je m'explique :
Ton idée est bonne si seulement je voulais créer des miniatures très simplement et sans me poser de question sur la rapidité de la chose. Mais le problème est cette ligne :
dim lImage as new Bitmap(pFileName)
Cela charge l'image complètement et donc prend du temps au traitement (je charge plusieurs centaines d'images à partir d'un reflex numérique avec des images de 6 à 8M pixels.)
Je connaissais déjà cette manière la :
Private Sub Miniature(ByVal ObjetPictureBox As PictureBox, ByVal ImgChemin As String, ByVal ImgTaille As Size)
Dim Img As New Bitmap(ImgChemin)
Dim ImgThumb As Image = Img.GetThumbnailImage(ImgTaille.Width, ImgTaille.Height, Nothing, Nothing)
ObjetPictureBox.Image = ImgThumb
End Sub
Cela équivaut à la même chose que toi sauf que ça renvoi un objet image au lieu d'un objet graphic.
Les sources que j'ai cité ne charge nullement toute l'image mais ouvre l'image de la manière "image.fromstream" et accede aux miniatures de cette manière
Juste pour info, la bonne syntaxe pour ton exemple était :
Private Sub Miniature(ByVal pGraphics As Graphics, ByVal pFileName As String, ByVal pDestRectangle As Rectangle)
Dim lImage As New Bitmap(pFileName)
pGraphics.DrawImage(lImage, pDestRectangle)
End Sub
Ou en remplaçant le rectangle par les valeurs x,y,width et height.
En tout cas merci quand meme et si tu as une autre idée je suis preneur!
La programation c'est au moins autant prise de tête que ... je ne vois pas rien ne l'égale...
grosbidou21
Messages postés74Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention 5 février 20102 12 févr. 2007 à 13:54
La meme en plus lisible!
Salut, Malheureusement ça ne répond pas à ma question! Je m'explique : Ton idée est bonne si seulement je voulais créer des miniatures très simplement et sans me poser de question sur la rapidité de la chose.
Mais le problème est cette ligne :
dim lImage as new Bitmap(pFileName)
Cela charge l'image complètement et donc prend du temps au traitement (je charge plusieurs centaines d'images à partir d'un reflex numérique avec des images de 6 à 8M pixels.)
Je connaissais déjà cette manière la :
Private Sub Miniature(ByVal ObjetPictureBox As PictureBox, ByVal ImgChemin As String, ByVal ImgTaille As Size)
Dim Img As New Bitmap(ImgChemin)
Dim ImgThumb As Image = Img.GetThumbnailImage(ImgTaille.Width, ImgTaille.Height, Nothing, Nothing)
ObjetPictureBox.Image = ImgThumb
End Sub
Cela équivaut à la même chose que toi sauf que ça renvoi un objet image au lieu d'un objet graphic.
Les sources que j'ai cité ne charge nullement toute l'image mais ouvre l'image de la manière "image.fromstream" et accede aux miniatures de cette manière.
Juste pour info, la bonne syntaxe pour ton exemple était :
Private Sub Miniature(ByVal pGraphics As Graphics, ByVal pFileName As String, ByVal pDestRectangle As Rectangle)
Dim lImage As New Bitmap(pFileName)
pGraphics.DrawImage(lImage, pDestRectangle)
End Sub
Ou en remplaçant le rectangle par les valeurs x,y,width et height. En tout cas merci quand meme et si tu as une autre idée je suis preneur!
La programation c'est au moins autant prise de tête que ... je ne vois pas rien ne l'égale...
NHenry
Messages postés15155Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention26 septembre 2024159 12 févr. 2007 à 14:46
Bonjour
Je vois difficilement comment afficher une miniature de'une image sans la chargée.
De plus avec le format JPG (des appereils photos), il me semble
impossible de pouvoir récupérer une partie du fichier, soit tu charge
le fichier soit tu ne le charge pas.
C'e'st peut-être une bêtise, mais c'est comme cela que je le conçois.
Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Mon site
Vous n’avez pas trouvé la réponse que vous recherchez ?
grosbidou21
Messages postés74Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention 5 février 20102 12 févr. 2007 à 15:25
je t'assure que c'est faisable!
Apparement tu n'as pas VB6 ou n'a pas eu le temps de tester les 2 sources que j'ai mis en lien mais elles te prouvent bien qu'elle ont accès à l'image sans l'ouvrir entièrement. Beaucoup de source font appel au données EXIF des images JPEG pour extraire la miniature mais la taille maximale est de 160x120 ce qui ne m'interresse pas. Alors que ces sources font appel à autre chose (miniature de windows mais il ne me semble pas le fichier thumbs.db) pour générer ces miniatures.
Je suis désolé c'est un peu flou comme explication mais je dois avouer que je n'ai pas vraiment compris leur fonctionnement... Ca me dépasse un peu!
La programation c'est au moins autant prise de tête que ... je ne vois pas rien ne l'égale...
NHenry
Messages postés15155Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention26 septembre 2024159 12 févr. 2007 à 15:36
Bonjour
Ces sources utilisent une miniature précalculée (d'après
tes dires, je n'ai pas VB6 ici), donc elles ne chargent que la partie
du fichier qui les intéresse, mais comme tu le dis, elles sont limitées
à 162*120, si tu veux plus, il faut ouvrir tout le fichier.
Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Mon site
grosbidou21
Messages postés74Date d'inscriptionmardi 3 février 2004StatutMembreDernière intervention 5 février 20102 12 févr. 2007 à 15:46
Cela charge très certainement une partie précalculée de l'image je suis tout à fait d'accord avec toi mais l'avantage de ces 2 sources c'est que je ne suis PAS limité à des images de 160x120 mais je peux créer des images bien plus grande très rapidement et SANS ouvrir complètement l'image par un "new bitmap(chemin)" ou autre qui est trop long pour une boucle et avec des fichiers de plusieurs Mpixel.
La programation c'est au moins autant prise de tête que ... je ne vois pas rien ne l'égale...