Extraire résolution d'image

Résolu
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013 - 1 juin 2006 à 02:53
 Utilisateur anonyme - 25 juil. 2006 à 13:52
Bonjour,

Comment peut-on obtenir la résolution d'une image (BMP ou JPG) ?
En fait, je voudrais calculer sa taille en pouces à partir de sa taille en pixels que je sais retrouver.

Merci

10 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 juin 2006 à 09:29
tu peux faire :

Dim oPic As StdPicture
    Set oPic = LoadPicture("i:\a.jpg")
    MsgBox Me.ScaleX(oPic.Width, vbHimetric, vbInches) & "x" & Me.ScaleY(oPic.Height, vbHimetric, vbInches)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
1 juin 2006 à 11:24
ou par les propriétés fichier:


    Dim objShell    As Object

    Dim objFolder   As Object

    Dim strFileName As Object

    Dim Path        As Variant

    Dim Filename    As String

   

    Path = "C:\WINDOWS"

    Filename = "Bulles de savon.bmp"


    Set objShell = CreateObject("Shell.Application")

    Set objFolder = objShell.NameSpace(Path)

    Set strFileName = objFolder.ParseName(Filename)


    MsgBox "Largeur=" & objFolder.GetDetailsOf(strFileName, 27)

    MsgBox "Hauteur=" & objFolder.GetDetailsOf(strFileName, 28)


    Set strFileName = Nothing

    Set objFolder = Nothing

    Set objShell = Nothing

Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
1 juin 2006 à 11:30
ou par lecture directe:

<hr size="2" width="100%" />

    Dim Largeur     As Long

    Dim Hauteur     As Long

    Dim Filename    As String


    Filename = "C:\WINDOWS\Bulles de savon.bmp"


    Open Path & "" & Filename For Binary As #1

         Get #1, 19, Largeur

         Get #1, 23, Hauteur

         Close #1

    MsgBox "Largeur=" & Largeur

    MsgBox "Hauteur=" & Hauteur

<hr size="2" width="100%" />

    Dim Largeur     As Long


    Dim Hauteur     As Long


    Dim Filename    As String

    Dim Buffer      As String

    Dim i           As Integer


    Filename = "C:\IMAGES\01.jpg"

    Open Path & "" & Filename For Binary As #1

         Buffer = Space$(LOF(1))

         Get #1, , Buffer

         Close #1

    i = InStr(Buffer, Chr$(255) & Chr$(192))

    MsgBox "Largeur=" & Asc(Mid$(Buffer, i + 7, 1)) * 256 + Asc(Mid$(Buffer, i + 8, 1))

    MsgBox "Hauteur=" & Asc(Mid$(Buffer, i + 5, 1)) * 256 + Asc(Mid$(Buffer, i + 6, 1))

<hr size="2" width="100%" />
Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 juin 2006 à 00:47
en BMP position 39 et 43

par exemple 80 0C 00 00   --> &HC80 = 3200 pixels par mètre

32,00 * 2.54 = 81 ppp


si zéro par défaut 72 pour l'imprimante, 96 pour l'écran

Daniel
3

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 juin 2006 à 02:09
Salut,
oui je sais toujours aussi tard ...

80 0C 00 00   c'est un long sur 4 octets avec l'octet faible au début (Little indian)

donc faut le retourner 00 00 0C 80  --> &H00000C80

mais bon c'est pas la peine, il suffit de le lire directement dans un Long

    Get #1, 19, Largeur


pour JPG c'est différent c'est en Big indian sur 2 octets

d'ailleurs c'est pour cela que me suis trompé, c'est plutôt en position 15 et 17:


FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 C8 00 C8 00 00 FF FE


 00
10                
-->  Longueur = 16 (sans le FFE0)

 4A 46 49 46 00 -->  JFIF (la signature en chaîne ASCIIZ)

 01 01                -->  version 1.1

 01                    
-->  codage en pixels  (important: je sais pas s'il y a
d'autres possibilités)

 00
C8               
-->  résolution X = 200

 00
C8               
-->  résolution Y = 200

 00
00              
-->  c'est pour les miniatures


on ne peut donc pas le lire directement, il faut calculer

   &H00 * 256 + &HC8

   ce que j'avais fait ici:

   Asc(Mid$(Buffer, i + 7, 1)) * 256 + Asc(Mid$(Buffer, i + 8, 1))

Daniel
3
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
2 juin 2006 à 00:21
Merci à Renfield et Gobillot pour leur aide.
Ca fonctionne, mais j'ai mal posé ma question.  En fait ce que je veux obtenir c'est la résolution horizontale ou verticale d'une image et non sa hauteur et largeur. Ceci pour convertir ses dimensions connues de pixels en pouces puis points en faisant :
largeur en Px / résolution horizontale = largeur en pouces
ex:   444 px         300                              1,48"
comme l'info que l'on obtient en cliquant sur propriété d'un fichier image dans l'explorateur.
J'ai bien sûr essayé d'utiliser Me.scaleX et scaleY pour obtenir des pouces, puis le rapport pixels / pouces pour obtenir la résolution mais ça ne marche pas. En fait, j'obtiens la résolution de l'écran mais pas de l'image.
Je sais que dans BITMAPINFOHEADER pour 1 BMP on a 1 info Pixels par mètre à l'horizontale et verticale mais les doc indiquent "notion pour imprimante" et en + elle n'est pas toujours servie, je ne crois donc pas que ce soit la bonne piste ....

Donc si quelqu'un a un truc pour obtenir cette info. Merci
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 juin 2006 à 01:33
en JPG c'est tout au début en FF E0 position 16 et 18 sur 2 caractères

à vérifier parce que je viens juste de le trouver en comparant 2 images.


si je reviens à mon exemple 3200 pixels par mètres

soit 32 pixels par cm

donc une image de 640 pixels donnera sur l'imprimante (à 72 dpi) une taille de 20 cm

Daniel
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
2 juin 2006 à 19:21
Merci de tes réponses Gobillot, c'est très sympa de répondre aussi vite à cette heure de la nuit.  Aujourd'hui j'ai été surbooked, je n'ai donc pas testé ce que tu m'as dit mais je vais regardé. En tout cas ça me semble bien répondre.
Je ne suis pas 1 virtuose de la lecture hexa mais je sais faire les conversions par contre je n'ai pas compris, dans 1 premier tps, le passage dans ton exemple de
80 0C 00 00 à &HC80 ensuite ça va. (&H je sais)
Quoiqu'il en soit MERCI
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
3 juin 2006 à 12:43
Un très grand Merci à Gobillot, c'est exactement ce qu'il me fallait, je vais tester tout ça.
0
Utilisateur anonyme
25 juil. 2006 à 13:52
hey, Gobillot, et pour une propriété qui n'est pas sur tout les jpeg, mais parfois présente, la distance focale (photo prise par appareil avec objectif reglable, cest la variable correspondant au zoom utilisé)


 


Cette variable couplée à la compression DPI horizontale fois la compression verticale me donnera le ratio pour convertir une distance en pixel , en une distance en cm. Dis moi tout de suite si je suis dans le faux.
0
Rejoignez-nous