Redimmensionner et centrer une image dans une form [Résolu]

Signaler
Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
25 août 2005
-
Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
25 août 2005
-
Bonjour,

je suis en train de realiser un petit scanner d'image genre ACDSee, et
je souhaiterais que les images soient toutes centrées
horizontalement et verticalement. Si elles sont plus grandes que ma
form, je les redimmensionne.

Mon probleme est le suivant :

j'ai une form avec des menus et une statusbar. Mes images sont affichés
dans un controle image. Certaines photos (toutes mes images sont en
jpg) ne sont pas bien calées et deborde de la fenetre.



Si quelqu'un avait un bout de code qui puisse m'aider cela serait sympa.



Merci à vous.



Tom

5 réponses

Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
25 août 2005

salut,

j'ai trouvé la solution!!!

en fait l'unité retourné par la fonction
loadpicture(maphoto).width/heigth est exprime en unite himetric ce qui
equivaut a 0.01 mm.



donc pour resourdre ce probleme j'utilise toujours les scale comme
mesure de reference et je passe le scale mode en millimetre pour que
tout soit dans la meme unite.



Voici mon code qui fonctionne pour l'ensemble des images testées :



Public Function ImageDim(CheminDeLaPhoto As String, Imagebox As image, Form As Form, STB As StatusBar) As Boolean

'exemple: ImageDim "C:\Photo.bmp",Image1,Form1,me.statusbar1

'loadage des dimensions de l'image

Dim hhh, www, Hauteur

Form.ScaleMode = 6 'passage du scale mode en milimetre

hhh = LoadPicture(CheminDeLaPhoto).Height * 0.01 'on remet la mesure en millimetre

www = LoadPicture(CheminDeLaPhoto).Width * 0.01 'idem

Imagebox.Picture = LoadPicture(CheminDeLaPhoto)

Imagebox.Stretch = True

'redimensionnement

Hauteur = Form.ScaleHeight - STB.Height 'la hauteur des menus est compris dans le scale

If (hhh > Hauteur) Or (www > Form.ScaleWidth) Then

If (hhh / Hauteur) > (www / Form.ScaleWidth) Then

'maximal en hauteur

Imagebox.Height = Hauteur

Imagebox.Top = 0

Imagebox.Width = (Hauteur / hhh) * www

Imagebox.Left = (Form.ScaleWidth - Imagebox.Width) / 2

Else

'maximal en longueur

Imagebox.Width = Form.ScaleWidth

Imagebox.Left = 0

Imagebox.Height = (Form.ScaleWidth / www) * hhh

Imagebox.Top = (Hauteur - Imagebox.Height) / 2 - 260

End If

Else

Imagebox.Height = hhh

Imagebox.Width = www

Imagebox.Top = (Hauteur - Imagebox.Height) / 2

Imagebox.Left = (Form.ScaleWidth - Imagebox.Width) / 2

End If

Form.ScaleMode = 1 'repasse le scale mode en twips pour d'autres opérations

End Function

en esperant que cela puisse ne aider d'autre !!!

Tom
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
Salut !
Essaie ce bout de code

Public Function ImageDim(CheminDeLaPhoto As String, Imagebox As Image, Form As Form, STB As StatusBar) As Boolean
'exemple: ImageDim "C:\Photo.bmp",Image1,Form1,me.statusbar1
'loadage des dimensions de l'image
Dim hhh, www, Hauteur
hhh = LoadPicture(CheminDeLaPhoto).Height
www = LoadPicture(CheminDeLaPhoto).Width
Imagebox.Picture = LoadPicture(CheminDeLaPhoto)
Imagebox.Stretch = True
'redimensionnement
Hauteur = Form.Height - STB.Height - 250 '250 représente environ la hauteur des menus
If hhh > Hauteur Or www > Form.Width Then
If hhh / Hauteur > www / Form.Width Then
'maximal en hauteur
Imagebox.Height = Hauteur
Imagebox.Top = 0
Imagebox.Width = (Hauteur / hhh) * www
Imagebox.Left = (Form.Width - Imagebox.Width) / 2
Else
'maximal en longueur
Imagebox.Width = Form.Width
Imagebox.Left = 0
Imagebox.Height = (Form.Width / www) * hhh
Imagebox.Top = (Hauteur - Imagebox.Height) / 2 - 260
End If
Else
Imagebox.Top = (Hauteur - Imagebox.Height) / 2
Imagebox.Left = (Form.Width - Imagebox.Width) / 2
End If
End Function

J'espère que çà te convient !
@+
Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
25 août 2005

salut et merci de m'avoir repondu aussi vite.

Par contre le code que tu m'as donné agrandit des images qui sont plus
petites que la taille de la form et qui donc n'ont null besoin de se
voir agrandit, ensuite il me manque toujours le bas des images.

Mais ton code est mieux que le mien donc je vais retravailler dessus pour voir si je peux l'ajuster à mes besoins.



Merci encore.

Tom
Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
25 août 2005

pour le redimmensionnemant en utilisant les scalewidth et scaleheight de la form cela marche super bien ...

je continu de regarder pour ne pas agrandir les images qui n'en on pas besoin....
Messages postés
10
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
25 août 2005

salut,

j'ai trouvé la solution!!!

en fait l'unité retourné par la fonction
loadpicture(maphoto).width/heigth est exprime en unite himetric ce qui
equivaut a 0.01 mm.



donc pour resourdre ce probleme j'utilise toujours les scale comme
mesure de reference et je passe le scale mode en millimetre pour que
tout soit dans la meme unite.



Voici mon code qui fonctionne pour l'ensemble des images testées :



Public Function ImageDim(CheminDeLaPhoto As String, Imagebox As image, Form As Form, STB As StatusBar) As Boolean

'exemple: ImageDim "C:\Photo.bmp",Image1,Form1,me.statusbar1

'loadage des dimensions de l'image

Dim hhh, www, Hauteur

Form.ScaleMode = 6 'passage du scale mode en milimetre

hhh = LoadPicture(CheminDeLaPhoto).Height * 0.01 'on remet la mesure en millimetre

www = LoadPicture(CheminDeLaPhoto).Width * 0.01 'idem

Imagebox.Picture = LoadPicture(CheminDeLaPhoto)

Imagebox.Stretch = True

'redimensionnement

Hauteur = Form.ScaleHeight - STB.Height 'la hauteur des menus est compris dans le scale

If (hhh > Hauteur) Or (www > Form.ScaleWidth) Then

If (hhh / Hauteur) > (www / Form.ScaleWidth) Then

'maximal en hauteur

Imagebox.Height = Hauteur

Imagebox.Top = 0

Imagebox.Width = (Hauteur / hhh) * www

Imagebox.Left = (Form.ScaleWidth - Imagebox.Width) / 2

Else

'maximal en longueur

Imagebox.Width = Form.ScaleWidth

Imagebox.Left = 0

Imagebox.Height = (Form.ScaleWidth / www) * hhh

Imagebox.Top = (Hauteur - Imagebox.Height) / 2 - 260

End If

Else

Imagebox.Height = hhh

Imagebox.Width = www

Imagebox.Top = (Hauteur - Imagebox.Height) / 2

Imagebox.Left = (Form.ScaleWidth - Imagebox.Width) / 2

End If

Form.ScaleMode = 1 'repasse le scale mode en twips pour d'autres opérations

End Function

en esperant que cela puisse ne aider d'autre !!!

Tom