Dimensions d'une image VBA [Résolu]

Scarbiet94 - 27 juin 2013 à 16:25 - Dernière réponse :  Scarbiet94
- 28 juin 2013 à 13:50
Bonjour,

A partir d'une procédure qui récupère les données d'une image

Sub FileMetadata()
    
    Dim fileFolder As String
    Dim fileNm As String
    Dim i As Integer
    Dim objShell As Shell32.Shell
    Dim objFolder As Shell32.Folder
    Dim objFolderItem As Shell32.FolderItem
    Dim cTxt As String
    'chemin et fichier à adapter
    fileFolder = "C:\Images"
    fileNm = "Test.jpg"
    
    Set objShell = New Shell
    Set objFolder = objShell.Namespace(fileFolder)
    Set objFolderItem = objFolder.ParseName(fileNm)
    
    For i = 0 To 40
        cTxt = cTxt & vbCrLf & objFolder.GetDetailsOf(objFolder, i) & " : " & objFolder.GetDetailsOf(objFolderItem, i)
    Next
    
    Set objFolderItem = Nothing
    Set objFolder = Nothing
    Set objShell = Nothing
    
    MsgBox cTxt
End Sub

j'ai voulu prendre uniquement la taille de l'image.

cTxt =  objFolder.GetDetailsOf(objFolderItem, 32)


mais j'obtiens des points d'exclamation en début et en fin de chaîne que je n'arrive pas à enlever.
Afficher la suite 

8 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 juin 2013 à 07:22
+3
Utile
Si tu as une méthode qui donne directement la taille en pixel ou quelque chose qui remplace mon ratio...

heu.. Moi, non, mais VB6, oui !
Lezs mesures retournées par mon code sont en unités Himetrics.
Bien.
Tu veux ces mesures en pixels.
Bien
Ben ... ===>> on utilise simplement Scalex et Scaley de vb6 !
=>>
Exemple avec mon code ===>>
MsgBox ScaleX(blabla.Width, vbHimetric, vbPixels) & vbCrLf & ScaleY(blabla.Height, vbHimetric, vbPixels) 

je ne vois pas la difficulté.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 juin 2013 à 08:17
+3
Utile
Ah oui (zut, alors), tu ne développes pas sous VB6, mais sous VBA qui, lui, ne connait pas scalex et scaley.
Qu'à cela ne tienne ! J'ai déposé récemment un source/outil permettant de doter VBA de fonctionnalités VB6 dans ce domaine.
=>> Tapez le texte de l'url ici.
Sers-t'en donc.
Nota : j'ai fait ce code et l'ai déposé, mais ai en même temps exprimé (lis les commentaires) mon quasi désaveu en ce qui concerne certains "détournements" des applications Office. Elles ont d'autres vocations très spécifiques. Excel, par exemple, est un tableur et l'utiliser à d'autres fins est toujours abusif.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 juin 2013 à 10:46
+3
Utile
Juste un mot à propos de ta "constante" ratio, que tu as établie à 26.458005.
Elle est assez risquée. Pourquoi ? parce qu'elle a été calculée sur la base de 15 twips par pixel, tant en largeur qu'en hauteur. Il est certes vrai que tel est aujourd'hui la plupart du temps le cas des écrans. Mais pas toujours !
C'est la raison pour laquelle, dans le code du code dont je t'ai donné le lien, je calcule le nombre de twips par pixel en largeur et en hauteur et m'en sers dans mes calculs.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 28 juin 2013 à 10:58
+3
Utile
Pour être plus clair ===>> voici le calcul que tu as probablement fait pour ton "ratio" (ou quelque chose de semblable... Je l'ai ici "écrit à main levée)) :
1 / (((1 / 1000) / 2.54 * 1440) / 15)
Tous les chiffres que j'y ai mis en verts sont invariables (quelle que soit la machine). Celui en rouge ne l'est pas.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Commenter la réponse de Scarbiet94
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 27 juin 2013 à 18:05
0
Utile
Bonjour,
j'ai voulu prendre uniquement la taille de l'image.

Et pourquoi mets-tu alors toute cette lourde artillerie en oeuvre ? !
Nul besoin de l'objet shell pour cela !
    Set blabla = LoadPicture("C:\Images\Test.jpg")
    MsgBox blabla.Width & vbCrLf & blabla.Height



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Scarbiet94 - 27 juin 2013 à 23:36
0
Utile
Bonjour

J'ai essayé de cette façon pour avoir la taille des images directement en pixels. Pour l'instant j'utilise la fonction suivante :
Function TailleImage(Fichier As String, FichierNew As String) As String
Const Ratio = 26.458005
Dim oPict As New stdole.StdPicture
Dim Tmp  As String
Dim H As Single
Dim L As Single
    Tmp = Repertoire & Fichier
    On Error Resume Next
    Set oPict = stdole.LoadPicture(Tmp)
    H = oPict.Height / Ratio
    L = oPict.Width / Ratio
TailleImage = Str(CLng(H)) & "x" & Str(CLng(L))
End Function

Je suis obligé de passer par un "ratio" obtenu par approximation pour arriver aux pixels. Si tu as une méthode qui donne directement la taille en pixel ou quelque chose qui remplace mon ratio...

Merci
Commenter la réponse de Scarbiet94
Scarbiet94 - 28 juin 2013 à 13:50
0
Utile
Merci ucfoutu pour tes réponses et le temps passé sur mon problème.

Je suis venu au VBA fin décembre pour automatiser des tâches ou des calculs au boulot. Ils qui sont fait sur des feuilles Excel (la simulation par "nouvelle macro" est très pratique). J'ai pu faire assez rapidement (15 jours) une macro qui permet de visualiser les dépassements de seuils de pollution. Par contre, j'ai aussi vu très vite mes limites pour calculer le tassement du sol sous fondation et je suis venu sur le forum (cf. macro spécifique).

Pour apprendre le VBA et arriver à calculer les tassements, je me suis mis à faire une macro qui scanne les répertoires contenant des fichiers audios (flac) et les images qu'ils contiennent. Ces données sont rapatriées dans des feuilles Excel d'où mes posts sur le Flac, les images et renommer les fichiers "image".

Toutes ces explications pour te dire que ce que je fais tourne autour d'Excel.

Comme tous les débutants j'analyse les sources que je trouve et quand je ne comprends pas, comme pour le ratio, j'ai pris une cinquantaine d'image de différentes dimensions pour arriver à une valeur qui correspondent au mieux aux pixels.

Cette nuit, j'ai trouvé autre chose que j'ai adapté et qui donne la fonction suivante :
Function Taille_Image(Fichier As String) As String
Dim Img As Object
Dim Haut, Wide, Resolution As Long

On Error Resume Next
Set Img = CreateObject("WIA.ImageFile")
Img.LoadFile Fichier

Resolution = Img.HorizontalResolution
Wide = Img.Width
Haut = Img.Height

Taille_Image = Str(CLng(Haut)) & "x" & Str(CLng(Wide))
End Function

Pour finir, car je suis bavard, je vais étudier ton code, ça va être long et difficile. J'aime bien la possibilité de définir ses propres variables et constantes

Merci pour le temps que tu as passé
Commenter la réponse de Scarbiet94

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.