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 !

Rechercher des sujets similaires à "garder proportion image userform"