LIRE LA TAILLE D'UNE IMAGE D'UN FICHIER JPEG (TRÈS RAPIDE)

Messages postés
898
Date d'inscription
jeudi 6 juin 2002
Statut
Membre
Dernière intervention
26 juillet 2007
- - Dernière réponse : pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
- 7 nov. 2011 à 13: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/8575-lire-la-taille-d-une-image-d-un-fichier-jpeg-tres-rapide

Afficher la suite 
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
Merci, moi aussi je l'avais fait dans le but d'apprendre.

Avec VB6, on peut lire la taille d'une image, mais pour cela, il doit d'abord la charger, ce qui est très lent.
Ce bout de code m'a permis ensuite de faire un comparateur sans ouverture d'image. Puis un logiciel de classement d'image. Le classeur incorporait une routine qui copiait les images impossibles à ouvrir dans un répertoire. Les images récalcitrantes peuvent être parfois ouverte avec un logiciel tierce d'édition, on modifie un petit truc, on enregistre et l'image est bonne.

Avec VB10, le chargement d'une image est rapide, donc le code ne permet plus vraiment d'accélérer.
patriceB2
Messages postés
10
Date d'inscription
mardi 5 janvier 2010
Statut
Membre
Dernière intervention
17 novembre 2011
-
Je disposais d'une image que LOADPICTURE ne pouvait lire. Impossible aussi de gérér une erreur (plantage complet de VB6). Ce programme détecte que l'image a un problème!! Bravo donc! Bravo aussi à la démarche de ce genre de recherche pour comprendre, plutôt que d'utiliser des utilitaires tout fait, même s'ils sont plus simples. Il est bon de comprendre aussi....
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
Merci Florian,
le but de ce code était de voir un peu comment était fait le Jpeg.
en rechercanht sur internet, j'avais trouvé pas mal de dossiers assez épais sur la structure jpeg.
J'avais mi ce bout de code pour en faire un résumé.
La boucle 1 à 10 est pas terrible, mais ça évite d'avoir plus de ligne de code pour gérer les images HS (et c'est pas rare sur les images téléchargées) que pour afficher 2 chiffres.


pour les fonctions :
Label1.Caption = "Hauteur : " & LoadPicture(chemin).Height
Label2.Caption = "Largeur : " & LoadPicture(chemin).Width
J'ai pas trop pigé pourquoi je ne retombais pas sur la taille en twips, mais c'est bien ça en théorie. Sauf que pour afficher deux nombre, il charge deux fois l'image en mémoire. C'est tres long, surtout sur de grandes images.
Vu que windows affiche les excifs, il doit y avoir des fonctions API rapides pour le faire rapidement.
L'avantage avec ce bout de code, c'est de ne lire que le début de l'image et une seule fois et c'est rapide.
TFlorian
Messages postés
194
Date d'inscription
dimanche 3 mars 2002
Statut
Membre
Dernière intervention
19 décembre 2005
3 -
GÉNIAL !
J'ai réussi à récupérer des images suite à un formatage d'un disque...
Après la récupération des fichiers les photos mes images ne faisaient plus que 160 x 120 au lieu de 1600 x 1200 ..
Grâce a ton code j'ai compris la structure du JPEG et j'ai réussi à le décortiquer pour récupérer mes images HD ..
(Lorsque le fichier n'avait pas été trop détruit dut à une fragmentation trop importante du disque.. )

D'un point de vue perf, je préfère ta méthode que les méthodes toutes faire car on ne lit qu'une seule foi le fichier (sur le disque) alors que les APIs des Windows comme on les appels plusieurs fois, font plusieurs accès disque

Encore merci, et bonne prog a tous ;-)

TFlorian
pascal16m
Messages postés
67
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
13 juillet 2019
-
Ca c'est du deterrage
quand une photo est redimentionnée lors de son ouverture pour loger dans un controle picture ou image, il me semble qu'il te donne la taille de l'image redimentionnée.

Je pense qu'il existe une fonction toute faite qui donne toujours la bonne taille, mais je la connais pas.

J'ai quelques images où il y a un décalage d'1 ou 2 octets à l'intérieur du fichier, je sais pas pourquoi, et la fonction se trompe

sinon, lequel des deux se trompe ?