EXTRACTION DES MINIATURES DES FICHIERS

misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012 - 22 sept. 2006 à 08:30
cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010 - 13 mai 2011 à 07:09
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39648-extraction-des-miniatures-des-fichiers

cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010
13 mai 2011 à 07:09
Vais devoir reprendre mes recherches alors.
Ou alors ajouter une capture d'image depuis un de
mes projets ou je me cale ou je veux sur la vidéo.

Merci pour la réponse Rey ;-)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 mai 2011 à 09:50
Salut l'ami Belge,

le 260 ?
non, c'est la taille du buffer...
cf:
http://msdn.microsoft.com/en-us/library/bb761846(v=vs.85).aspx

Tu voudrais voir une autre image de thumbnail ? calé à un autre moment de la vidéo ?
cela est peut être un réglage dans la registry...

pas dans ma source, en tous cas.

@+ l'ami
cs_Fraggy Messages postés 95 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 2 juin 2010
11 mai 2011 à 22:11
Déterrage forcé mais qui en ravira d'autres ;-)

Salut Rey,

Bien que tout fonctionne nickel il y a une chose que je ne parviens pas à comprendre.
Avec des vidéos :
Je clique un fichier --> Image OK
Je clique un autre --> Image OK
Je reviens sur la première --> Image OK et identique à la première (logique), ce qui me laisse penser que t'as mis une valeur fixe pour aller chercher cette image. La question est ou est cette valeur ? En tout cas moi je ne la trouve pas. Le but choisir une autre si celle-ci ne me convient pas.

J'ai d'abord penser que c'était le "260" de :
oExtract.GetLocation sFile, 260, 0, lpSize, 32, eFlag
Mais visiblement c'est pas ça.

Merci pour les réponses Master ;-)
Dav.
zeunz Messages postés 200 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 30 juin 2008
3 janv. 2008 à 18:06
slt renfield,

tres bonne source, je voulais justement comprendre la gestion des miniatures des fichiers videos.

Si je peux me permettre, je mettrai un objet image a la place de la picturebox afin que l'image qu'elle contient soit redimensionnee.

Private Sub CcFile_Click()
With CcFile
If .ListIndex <> -1 Then
Set Image1.Picture = GetThumbNail(.Path & "" & .List(.ListIndex), CcPicPreview.Width, CcPicPreview.Height)
End If
End With
End Sub

Mais le principe reste le même.

salutations, zeunz.
cs_berend Messages postés 2 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 5 octobre 2007
5 oct. 2007 à 08:17
Dear Renfield,

The other source works fine on the same Windows 2000 test machine. The part that executes similar code is:

If pidl <> 0 Then
'on extrait la miniature de fichier
Set getThumbnail = item.GetUIObjectOf(0&, 1&, pidl, uuidIExtractImage, prgf)
Else
'sinon du dossier parent
Set getThumbnail = item.CreateViewObject(0&, uuidIExtractImage)
End If

In this code, I tested the call to GetUIObjectOf, that works good. In what situation should I reach the call to CreateViewObject? Would it be possible to rewrite the GetThumbNail function in "EXTRACTION DES MINIATURES DES FICHIERS", so that it does GetUIObjectOf instead of the problem call to BindToObject(IExtractImage)? I would prefer to use the GetUIObjectOf method, but it is a problem for me to change the structure of my program so that it matches the other sample that you provide - I would prefer to leave the parameters of GetThumbnail same and only change it internally.

Finally, I found a peculiarity while testing on my Windows 2000 testbed. I happen to click on the shortcut "@Source telecharge depuis ce lien.url" in the test folder and to my surprise the Extract method causes a MessageBox to appear. I can reproduce the same in the second program, see screenshot:
http://www.berend.com/images/screenshot.png

Is this something that you also encountered, could there be a way to surpress it? My program needs to run on a server, so the MessageBox is inconvenient.

Again thanks for providing the very accessible VB6 sample code to a difficult-to-understand Windows interface,

Best regards,


Berend
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 oct. 2007 à 06:33
Hi,

Thanks you for having done some searchs and not just say 'it's bas : it doesn't work !!! '

does this similar source:

http://www.vbfrance.com/codes/EXTRACTION-MINIATURES-FICHIERS-COMME-DANS-EXPLORATEUR-MODE-DETAILS_39524.aspx

suffer of the same drawback ?
cs_berend Messages postés 2 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 5 octobre 2007
4 oct. 2007 à 20:53
Hello,

First of all: please excuse that I do not write in French, unfortunately I am not confident in your beautiful language. I do hope that you do understand me anyway.

I had a problem with your -otherwise excellent- code on Windows 2000 SP4. This statement always failed with "Invalid procedure call or argument":
oFolder.BindToObject pIdL, 0, lpIID_IExtractImage, oExtract

It worked fine on all other Windows versions that I tried (XP, 2003, Vista, 2008 server). I found out myself that using BindToStorage rather than BindToObject will work on Windows 2000. To keep as close as possible to your code, I put in this change to fix my problem:
oFolder.BindToObject pIdL, 0, lpIID_IExtractImage, oExtract
If oExtract Is Nothing Then
oFolder.BindToStorage pIdL, 0, lpIID_IExtractImage, oExtract
End If

Perhaps this helps other readers as well.

With kind regards,

Berend Engelbrecht
Pays Bas
cs_ravachol Messages postés 86 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 10 juillet 2008
1 oct. 2007 à 11:18
merci !
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 oct. 2007 à 11:05
a ajouter dans Projet > références (le TLB)
cs_ravachol Messages postés 86 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 10 juillet 2008
1 oct. 2007 à 10:17
re bonjour,

je pense que le pb vient des deux fichiers ShellExt.odl et ShellExt.tlb
mais je ne sais pas quoi en faire ou ou les mettre !
cs_ravachol Messages postés 86 Date d'inscription vendredi 28 décembre 2001 Statut Membre Dernière intervention 10 juillet 2008
1 oct. 2007 à 10:13
bonjour,

quand j'excute le prog pas de pb mais quand j'ai importer le modules .bas et le code dans mon prog
j'ai des user defined type not defined dans le modules notamment

avez vous une idée ?
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013
3 juil. 2007 à 14:57
Effectivement ça fonctionne sur d'autres pc. Il y a eu des codecs et des filtres directshow d'installés car le pc est dédié au soft de traitement vidéo que j'installe dessus, et donc entre autres à cette appli de miniatures. Il me reste à faire le ménage des codecs et si ça marche pas je reformate. x-( Merci Renfield, autant pour ces réponses que pour ce bout de code très utile.

Et désolé d'avoir pris les commentaires pour un forum :)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 14:42
pour le moins étrange.

concernant tes craintes, le tlb ne fait que déclarer des interfaces... un truc carré qui tourne depuis des lustres.

pas de nouveau codec ou de modif de config/installation sur ton poste ?

testé sur un autre poste ?
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013
3 juil. 2007 à 14:35
Je précise que les version intermédiaires qui fonctionnaient bien ont maintenant le même problème.
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013
3 juil. 2007 à 14:13
oui, elle est en Scalemode = 3-pixels Je me permets de mettre le bout de code qui coince:
Private Sub Form_Load()

VScroll1.Max = -100
Set grandeimage.Picture = GetThumbNail(Fichierxxx, CcPicPreview.Width, 438)
End Sub


Private Sub VScroll1_Change()
Biz = grandeimage.Height - CcPicPreview.Height < ici
grandeimage.Top = Biz * VScroll1.Value / 100
End Sub

Private Sub VScroll1_Scroll()
'Régalge de l'image verticalement

If VScroll1.Value < VScroll1.Max Then
VScroll1.Value = VScroll1.Value + 10

End If

Biz = grandeimage.Height - CcPicPreview.Height < ici
grandeimage.Top = Biz * VScroll1.Value / 100
End Sub

Le code fonctionnait très bien jusqu'à il y a peu mais plante maintenant. C'est pour ça que je me demande si ce n'est pas la bibliothèque de types ShellExt et si il n'y a pas des antécédents parmi vous de plantages de cette bibli?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juil. 2007 à 12:24
sur que ta Form est bien en Scalemode = 3 - pixels ?
Billybobbonnet Messages postés 148 Date d'inscription lundi 12 février 2007 Statut Membre Dernière intervention 9 novembre 2013
3 juil. 2007 à 11:56
Salut Renfield,

Ton code est super, il marche très bien et je l'utilise depuis un moment. En fait, je crée une miniature d'une vidéo que j'affiche dans un cadre plus petit, avec un ascenceur pour la déplacer, et ça me donne des valeurs pour retailler la vidéo en traitement vidéo. Le pépin, c'est que depuis hier, alors que je mettrais ma main au feu que je n'ai rien changé, il me dit, lorsque j'arrive sur la form qui affiche la miniature que "grandeimage", mon conteneur d'image, (=>Set grandeimage.Picture = GetThumbNail(MonFichier, CcPicPreview.Width, 438)) que grandeimage fait un dépassement de capacité (erreur6) et lui donne pour valeur de Grandeimage.height, en débogage, quelque chose comme 698000 pixels.... L'image (ou plutôt la vidéo d'ou vient l'image) en fait 3500.

Je me demande si ce n'et pas la bibliothèque de types Shellext.tlb qui pose pépin. Quelqu'un a eu affaire à ce genre de problème?
grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 2
8 févr. 2007 à 15:22
Tant pis merci quand même.
Je regarderai plus précisement la source de ShareVB (que j'avais déjà vu mais pas essayé la traduction en .NET).
Si j'arrive à mettre ça en .NET je vous tiens au courant
@+
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
8 févr. 2007 à 14:41
essaye avec la source de ShareVB

http://www.vbfrance.com/codes/EXTRACTION-MINIATURES-FICHIERS-COMME-DANS-EXPLORATEUR-MODE-DETAILS_39524.aspx

concernant .Net, je suis incapable de t'aider.
grosbidou21 Messages postés 74 Date d'inscription mardi 3 février 2004 Statut Membre Dernière intervention 5 février 2010 2
8 févr. 2007 à 14:09
Salut Renfield,
J'aurai aimer savoir s'il est possible de passer cela en .NET (2.0)?
J'ai essayé mais de nombreuse erreur apparaissent lors de la traduction. De plus j'ai tenté de recompiler seulement le module de ta source dans un dll et de l'importer dans un projet .NET mais l'appel "GetThumbnail(...) ne renvoi pas un objet "image" mais un "Ipicture" qui ne plait pas au .NET.
J'ai fait pas mal de recherche sur codesources et ta source est vraiment la meilleure puisqu'elle peut générer des images de grande taille et ne s'arrete pas à la définition de nombreux extracteur de miniatures (160x120 je crois)
J'espère que tu auras une réponse à cela.
D'avance merci!
Alain
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
6 oct. 2006 à 11:39
Renfield>
Clair net et précis.
Merci.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 oct. 2006 à 11:10
le champs d'application n'est simplement pas le même...
LoadPicture fais son job, et sais manipuler les images


la source que je propose ici va faire des recherches en base de registre, va instancier des dll de tiers afin qu'elles puissent extraire des miniatures de films, documents Office, etc...
bref, y'a plus de boulot a effectuer...
ce qui fait que ce que implémente concernant les images est de fait plus rapide ^^
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
6 oct. 2006 à 10:54
Renfield>
Tu peux développer ton explication?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 oct. 2006 à 10:49
et encore, LoadPicture n'est pas forcément le plus rapide ^^
cependendant, elle ne fonctionne que pour les BMP/JPG/GIF...
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
6 oct. 2006 à 10:46
Renfield>
Par contre j'ai fait un comparatif de vitesse d'affichage dans le ListView.

Résultat:
La méthode avec LoadPicture(FileName)dans un PictureBox,
puis SetStretchBltMode(PictureBox.hDC, STRETCHMODE),
puis StretchBlt(PictureBox.hDC,...etc...
est beaucoup plus rapide qu'avec getThumbnail(...).

Y at'il une amélioration à apporter ou est-ce normal pour ce genre d'utilisation ou encore quelque chose m'échappe...peux-tu m'éclairer.
Merci.
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
26 sept. 2006 à 07:57
Renfield>
J'ai trouvé :-)
En supprimant la réf. à DAO 3.51 c'est OK.
Pourquoi, ça toi seul peut le trouver, je te fais confiance!
Merci pour ton engagement.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 sept. 2006 à 16:09
on dirait qu'il aime pas mon fichier .TLB...
(est-til bien dans les references de ton projet)
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
25 sept. 2006 à 15:56
Renfield>
Lorsque je boucle une liste de fichiers voilà ce que ça me donne...

Un message VB
Erreur de compilation:
Type d'argument ByRef incompatible
Concerne lpSize dans la Function getThumbnail

Peux-tu éclairer mes lanternes :-(
Merci d'avance
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 sept. 2006 à 01:21
après discussions sur le forum, il s'avère qu'un post similaire de Monsieur ShareVB a été fait très recemment...

je vous transmet donc l'addresse de celui-ci, et m'aprete a effacer le mien.

http://www.vbfrance.com/codes/EXTRACTION-MINIATURES-FICHIERS-COMME-DANS-EXPLORATEUR-MODE-DETAILS_39524.aspx
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
24 sept. 2006 à 11:12
Salut Renfiled,
Ben...comme dab...source impécable dans tout les sens du terme...Présentation simple mais éfficace, voilà une souce qui peut m'être utile , pour afficher des miniatures de pièces mécanique et diverses dans mes sources de bases de données.
10/10.
Grosse poignée de main !!Les bons chiffres 73 / 51
Exploreur
A+
cs_pluplu Messages postés 615 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 4 juillet 2012
23 sept. 2006 à 15:48
ça n'a pas l'air de fonctionner sous Windows 2000 !?
cs_rodyrody Messages postés 2 Date d'inscription jeudi 10 février 2005 Statut Membre Dernière intervention 23 septembre 2006
23 sept. 2006 à 08:54
Excellente source!
Merci beaucoup pour ton partage..
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2006 à 09:38
Moustachu...
euh...
oui, voilà, bien sûr, il s'agit bien évidemment de la bande annonce du film ^^
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2006 à 09:37
Jamais vu qu'il s'agissait d'une demande si récurrente, Dark Sidious,
c'est toujours ça, au moins, maintenant, y'a un exemple dispo ^^

de là a dire que ca évitera les questions sur le sujet, je l'ignore, des questions dont les réponses sont déjà fournies sur le Forum ou dans des codes, il en arrive tous les jours :p
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
22 sept. 2006 à 09:30
Renfield> Libre a toi d'avoir la bande annonce du film en Xvid :o), il est vrai qu'un écran noir n'aurait pas illustré vraiment ta source ! Je confirme aussi que sous NT, ça ne marche pas. Mais bon, hein, sous NT aussi...
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 sept. 2006 à 09:29
Alors là, merci renfield ! Ca va permettre (je l'espère) d'éviter toutes les questions sur le sujet qu'on trouve régulièrement sur le forum à ce sujet.

DarK Sidious
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2006 à 09:23
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
22 sept. 2006 à 09:15
mais ca change tout alors :)
c tres interressant ton truc
g pas vb6 donc jpeux pas tester.... ca marche aussi sous win2k ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2006 à 09:09
Oui, MisterN, libre a toi d'exploiter la chose comme tu le désires...
par exemple, générer une page Web avec des miniatures de vos documents Office, films, etc...
J'ai codé cela suite a une question sur le Forum. Le propriétaire du post nous en dira peut etre plus sur l'utilisation qu'il compte faire de cette fonction^^

Désolé, Moustachu...
tu n'as pas tord dans la fond, mais je trouvais qu'une vidéo présentait pas trop mal...
cependant, la plupart des vidéos commencent par un bel écran tout noir.
la miniature n'aurait pas été très convainquante :p

Olixelle, on ne va pas piocher dans thumbs.db si c'est ce que tu penses. En clair, l'utilisateur n'a pas a avoir visité son repertoire pour qu'une miniature soit trouvée ; elle est regénérée systématiquement (je pourrais peut être, même, la mettre en cache, en modifiant simplement le flag transmis à la méthode GetLocation...)
Maintenant, c'est vrai que tous les fichiers ne génèreront pas de miniature... ca dépend de ce que votre système prend en charge.

a noter que certains éditeurs d'image ajoutent des extensions au Shell qui permettent d'avoir des miniatures pour leurs formats propriétaires.
EBArtSoft a pour l'exemple créé une de ces extensions Shell, qui fournis des miniatures pour les fichiers PCX:
http://www.vbfrance.com/codes/AFFICHER-MINIATURES-PERSO-DANS-EXPLORER_37610.aspx
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
22 sept. 2006 à 08:50
chuis amoureux aussi :)
par contre j'imagine que par défaut, tous les fichiers n'ont pas de miniatures, il faut que l'user rentre dans le dossier en quesiton pour qu'elle soit créée non ?
Connaissez vous une méthode pour demander à Windows de les générer ?
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
22 sept. 2006 à 08:47
Bonjour,

Merci pour cette source. Toujours sympa de savoir comment tout ça fonctionne.

Mais dis... pirates des caraïbes 2....Xvid... t'aurais pas ou trouver autre chose ;o). En tout cas, tu n'as pas choisi l'atrice plus moche !!

++
Moustachu
misterN Messages postés 40 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 14 décembre 2012
22 sept. 2006 à 08:30
Renfield>
En tout cas bravo pour tes nombreux commentaires et progs constructifs que tu dispenses à tous les Vbistes comme moi admiratifs.
Si j'ai bien compris la portée de ce code,
on peut recadrer l'image dans le PictureBox, la stocker via une boucle dans un ImageList puis charger un ListView...rapidement ou y at'il une autre soluce?
A+