Redimentionner controle image en conservant les proportions

Soyez le premier à donner votre avis sur cette source.

Vue 11 314 fois - Téléchargée 921 fois

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

Ajouter un commentaire

Commentaire

violent_ken
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Salut, quelques commentaires constructifs sur ton code pour que tu puisses l'améliorer :


1) indente ton code (ajoute des tabulations)

2) ajoute "Option Explicit" en haut de code pour pouvoir voir les éventuels problèmes lors de la compilation

3) "Dim Ratio" ==> "Dim Ration As Double". Ne jamais omettre le type, sinon çà déclare en Variant et c'est mal (consomme plus en mémoire et type très lent à manipuler)

4) "Shape1.Top = 0
Shape1.Left = 0
Shape1.Width = UserControl.Width
Shape1.Height UserControl.Height"
>
"With Shape1
.Top = 0
.Left = 0
.Width = UserControl.Width
.Height = UserControl.Height
End With" (plus clair à la relecture)

5) "Sub LoadImage" ==> "Public Sub LoadImage". Mettre de préférence de manière claire la portée des fonctions/procédures.

6) N'utilise PLUS JAMAIS de Goto ;) Très vieux style de programmation très difficile à relire, bien que rapide une fois compilé. Il est toujours possible de faire autrement qu'avec des Goto (sauf pour la gestion des erreurs).

7) DoEvents facultatifs ==> on les enlève (gagne du temps processeur et évite l'affreux clignotement)

8) Tant qu'à faire un UserControl, autant le faire complet (ajoute les properties Picture (comme çà on charge l'image dans l'IDE), ShapeColor, ShapeWidth, BackColor, ShapeStyle...etc.)


Bon courage ;)
@+

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.