Redimmensionner une image extérieur

cs_ciram Messages postés 2 Date d'inscription mardi 22 mai 2007 Statut Membre Dernière intervention 22 mai 2007 - 22 mai 2007 à 16:53
croftman Messages postés 110 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 2 avril 2010 - 16 juin 2007 à 16:16
Bonjour,
J'ai un petit problème avec un objet image.
J'ai programmé une petite appli en vb6 pour faire un exe sur cdrom.
Sur la première page j'ai mis un objet Image.
Cet objet recoit au chargement en Form_Load() un fichier A.gif contenu dans un repertoire fixe du cd.
Le probleme c'est qu'en fonction des besoins (donc du CD final) l'image A.gif n'a pas les mêmes dimensions !
Bien sur je souhaite que mon objet image ne change pas de dimensions.

Je souhaiterais que l'image ne soit pas déformer durant le redimmensionnement comme avec stretch et que les rapports des dimensions soit respectées.

Jai essayé le prog ci-dessous mais cela ne fonctionne pas :
Private Sub Form_Load()
Image5.Picture = LoadPicture(App.Path & "\data\A.gif")
If Image5.Picture.Height > Image5.Picture.Width Then
    Image5.Picture.Height = 1695
    Image5.Picture.Width = Image5.Picture.Width * (1695 / Image5.Picture.Height)
Else
    Image5.Picture.Width = 2775
    Image5.Picture.Height = Image5.Picture.Height * (2775 / Image5.Picture.Width)
End If
End Sub

merci d'avance pour votre aide
CIRAM

2 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
22 mai 2007 à 17:46
Bonjour,

Il ne s'agit là que d'un simple calcul arithmétique très élémentaire, basé sur le rapportk
Largeur/hauteur de l'image... (niveau CE2)
Les données de ton problème ?

- une surface d'accueil dont je te conseille de la définir carrée (ce qui te permettra d'y afficher la plus grande image proportionnée possible.
- les dimensions réelles de ton image
- si la hauteur est la plus grande, tu gardes la hauteur de ta surface d'accueil et du appliques le coefficient k à la largeur de la surface
- si c'est la largeur qui est la plus grande, tu fais l'inverse (tu gardes la largeur de ta surface et tu calcules sa hauteur en te servant du coefficient k)

Il te reste à stretcher ton image (propriété Strectch d'un contrôle image ou utilisation de paintPicture pour une picturebox ...

Tout celà est fort élémentaire, comme tu peux le constater ....
Ce n'est pas parce que l'on est en développement informatique que l'on doit oublier ces notions d'homothétie de base !
0
croftman Messages postés 110 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 2 avril 2010
16 juin 2007 à 16:16
Salut!

Moi j'ai fais ça : (oui je sais pas top les goto  )

If fond.Width > fond.Height Then
GoTo plusgrand
ElseIf fond.Width = fond.Height Then
If fond.Width < 4500 Then GoTo fin
    fond.Width = 3375
    fond.Height = 3375
    GoTo fin
Else
GoTo pluspetit
End If

plusgrand:
fond.Left = 217
fond.Top = 217
If fond.Width < 4500 Then
GoTo fin
Else
ratio = fond.Width / fond.Height
    If ratio >= 1.33333333333333 Then
        fond.Width = 4500
        fond.Height = 4500 / ratio
    Else
        fond.Height = 3375
        fond.Width = 3375 * ratio
    End If
End If
GoTo fin

pluspetit:
fond.Left = 217
fond.Top = 217
If fond.Height < 3375 Then
    GoTo fin
Else
    ratio = fond.Height / fond.Width
    fond.Height = 3375
    fond.Width = 3375 / ratio
End If
GoTo fin

fin:
Dim j As Integer
j = 217

fond.Left = j + ((4500 - fond.Width) / 2)
fond.Top = j + ((3375 - fond.Height) / 2)
Me.Width = 4920
Me.Height = 3795

Voila et moi ça marcge impec

Le j c'est juste par rapport a une bordure
0
Rejoignez-nous