Miniatures en VB.NET

grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 - 12 févr. 2007 à 11:27
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 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...

8 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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)

<fon></fon>
0
grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 2
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...
0
grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 2
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...
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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
0

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

Posez votre question
grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 2
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...
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
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
0
grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 2
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...
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
25 févr. 2007 à 21:06
salut,

pour ce que ca intéresse, la traduction .Net se trouve ici :
http://www.vbfrance.com/codes/NET-EXTRACTION-MINIATURES-FICHIERS-COMME-DANS-EXPLORATEUR-MODE_41631.aspx

ShareVB
0
Rejoignez-nous