Garder les proportion d'une image dans un userform
Bonjour à tous,
Dans mon fichier de gestion de matériel, j'ai mis un bouton qui me permet d'ouvrir un formulaire, qui affiche l'image du matériel en question.
Jusque là pas de problème.
Afin d'adapter l'image à la taille de l'objet "image", j'utilise le code suivant :
Me.Image1.PictureSizeMode = fmPictureSizeModeStretch
Ce code est impeccable quand l'image est de forme allongée.
Seulement, quand mon image est plus haute que large, la visualisation n'est plus bonne.
est-il possible avec un code VBA, de modifier l'objet image suivant l'image à faire apparaitre tout en gardant les proportion?
En vous remerciant encore
titi32600
Bonjour,
Il te faut choisir : fmPictureSizeModeZoom pour éviter toute déformation.
Ensuite, tu peux effectivement modifier les dimensions du contrôle (Height etWidth) pour les ajuster aux proportions de l'image.
Cordialement.
Salut MFerrand
le "fmPictureSizeModeZoom" fonctionne très bien pour une image qui a la même forme que ma fenêtre de mon formulaire, mais si une image différente (plus en hauteur qu'en largeur) doit être affichée, l'affichage est moche.
je devrais peut-être affecter des valeurs Height etWidth pour chaque image, et transformer mon code pour qu'il adapte ma fenêtre image en fonction de ces valeurs.
je vais essayer cela.
Je pensait simplement qu'il aurait pu exister un code qui adapte automatiquement ma fenêtre en fonction de l'image à afficher.
titi32600
Bonjour à tous,
Voici une partie de code d'une de mes appli destinée à centrer des photos dans un contrôle image (Image1) d'un Usf. Ici :
* Image1 est contenue et centrée dans Frame1
* Image1 est en SizeModeStretch
* l'argument Lien_img (String) est de la forme => Lien_img="D:\Images\2018011918.jpg"
Dim Img As Object, W As Single, H As Single
Set Img = LoadPicture(Lien_img)
W = Img.Width
H = Img.Height
With UserForm2.Image1
.Picture = Img
.Width = W / H * .Height
.Left = (UserForm2.Frame1.Width / 2) - (.Width / 2)
End With
Nb : l'idée ici est d'adapter la photo importée à la taille du contrôle (et non l'inverse)
Pierre
salut PierreP56,
je vais essayé et adapter ton code et reviens vers toi pour t'indiquer si OK
merci encore
titi32600
Bonjour, Salut Tatiak !
Si tu t'orientes vers l'adaptation des proportions du contrôle Image aux proportions de l'image, il te faut déterminer le ratio de l'image pour pouvoir l'appliquer au contrôle. On peut le faire en allant récupérer les dimensions dans propriétés de l'image...
Ci-dessous une fonction destinée à te permettre d'établir ce ratio image lors de l'opération :
Function RatioImg(ByVal ChDos, ByVal Fimg) As Single
Dim shApp As Object, fld As Object, Fich As Object, hw
Set shApp = CreateObject("Shell.Application")
Set fld = shApp.Namespace(ChDos)
Set Fich = fld.items.Item(Fimg)
hw = fld.getdetailsof(Fich, 31)
hw = Split(Mid(hw, 2, Len(hw) - 2), "x")
RatioImg = Val(hw(0)) / Val(hw(1))
End Function
Les arguments de la fonction sont : le chemin du dossier où se trouve l'image et le nom du fichier image.
La fonction renvoie le rapport hauteur/largeur, rapport que tu peux appliquer à la largeur de ton contrôle pour en ajuster la hauteur aux proportions de l'image :
With Image1
.Height = .Width * ratio
End With
Teste préalablement cette fonction car sur cette ligne :
hw = fld.getdetailsof(Fich, 31)
le paramètre 31 (index de la propriété) dépend de ton système d'exploitation. C'était 26 sous WinXP, 31 est valide pour Win7, à voir s'il l'est pour les versions ultérieures...
En outre, la chaîne texte renvoyée par la propriété a évolué dans sa forme au fil des versions du système et il y a donc eu des variations pour en extraire les deux dimensions.
Tu devrais vite voir en testant la fonction sur quelques images si le résultat renvoyé est bien le bon. Sinon je te communiquerai une autre procédure listant les propriétés d'une image, qui permettra d'une part de vérifier l'index de la propriété recherchée et d'autre part la forme sous laquelle la valeur de la propriété se présente, à partir de quoi on pourra adapter la fonction à ton système d'exploitation.
Cordialement.
Salut MFerrand,
Désolé du retard à répondre.
Effectivement ta fonction est bien pratique, et me permet de retravailler les dimensions de mes images, afin qu'elles soient correctes lors de la visualisation.
En fait, je me suis rendu compte que j'ai très peu d'image en format portrait, et beaucoup plus en format paysage.
merci encore à tous de votre aide.
tit32600
je note ma demande comme résolue
Pas de souci. Bonne continuation !