Redimentionner controle image en conservant les proportions

Description

Ce code permet simplement de centrer son image ajuster et centrer avec
UN SEUL control IMAGE, pour simplifier l'utilisation il est mis dans un
controle utilisateur....

J'ai parcourus les defferentes facons de faire ( apres coup ), et ma facon ce rapproche
un peu plsu d'une source de PcPunch toutefois je n'utilise pas de Picture

Je pense que cela peu faire une bonne base ;-)

Source / Exemple :


' utilisation
 ImageRedim1.LoadImage App.Path & "\apercu.jpg"

'-------------------------------------'
' Le code dans le control utilisateur '
'-------------------------------------'

Private Sub UserControl_Resize()

' un petit cadre pour mieux voir la limite du control
' on aurait pu le colorier...
Shape1.Top = 0
Shape1.Left = 0
Shape1.Width = UserControl.Width
Shape1.Height = UserControl.Height

' Mon control IMAGE1... 
Image1.Top = 0
Image1.Left = 0
Image1.Width = UserControl.Width
Image1.Height = UserControl.Height

End Sub

'-----------------------------

Sub LoadImage(Filename As String)

' cache image1 du controle utilisateur
Image1.Visible = False
DoEvents

Dim Ratio

Dim Largeur_dispo As Long
Dim Hauteur_dispo As Long
' Largeur du controle utilisateur
Largeur_dispo = UserControl.Width
' Hauteur du controle utilisateur
Hauteur_dispo = UserControl.Height

' Chargement des images
Image1.Picture = LoadPicture(Filename)

' si l'image est + large que haute ou carré alors...
If Image1.Picture.Width >= Image1.Picture.Height Then
2:
    ' La largeur = la largeur maximale dispo
    Image1.Width = Largeur_dispo
    ' Calcul du rapport proportionnel de l'image ( ratio )
    Ratio = Image1.Picture.Height / Image1.Picture.Width
    ' La hauteur = largeur maximale dispo * le ratio
    Image1.Height = Largeur_dispo * Ratio
    ' Si la hauteur dépasse de la hauteur maxi alors se baser sur le calcul en largeur sinon centrer image
    If Image1.Height > Hauteur_dispo Then GoTo 1 Else GoTo fin:
End If

' si l'image est - large que haute ...
If Image1.Picture.Width < Image1.Picture.Height Then
1:
    ' La hauteur = la hauteur maximale dispo
    Image1.Height = Hauteur_dispo
    ' Calcul du rapport proportionnel de l'image ( ratio )
    Ratio = Image1.Picture.Width / Image1.Picture.Height
    ' La largeur = hauteur maximale dispo * le ratio
    Image1.Width = Hauteur_dispo * Ratio
    ' Si la largeur dépasse de la largeur maxi alors se baser sur le calcul en largeur sinon centrer image
    If Image1.Width > Largeur_dispo Then GoTo 2 Else GoTo fin:

End If

fin:
'Centrage
Image1.Top = (Hauteur_dispo - Image1.Height) / 2
Image1.Left = (Largeur_dispo - Image1.Width) / 2

DoEvents
' Affiche l'image
Image1.Visible = True

End Sub

Codes Sources

A voir également

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.