Problème avec le PictureBox

Résolu
Signaler
Messages postés
17
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
13 novembre 2007
-
Messages postés
19
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
14 mars 2007
-
Bonjour !

J'ai un problème avec un de mes pictureBox.  Je veux mettre une image de type Bmp à l'intérieur de mon pictureBox.  Es-ce qu'il y a un moyen afin que l'image s'ajuste automatiquement à la grandeur du pictureBox ?

Présentement, mon image étant plus grosse je ne vois qu'une partie d'elle ?

Es-ce que quelqu'un connaît la façon de régler ce problème ?

Merci

Alexandre

12 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Avec le controle PictureBOx, tu as la propriété AutoSize, mais elle fait l'inverse de ce que tu veux. C'est le controle qui va etre redimentionné à la taille de l'image.

Sinon il fat prendre le controle Image, ou là tu as la propriété Stretch qui correspond à ce que tu veux.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Méthode popur avoir ta picturebox la plus grande possible tout en respectant les propoortions :

1) Au départ : une picturebox parfaitement carrée
2) regarder les grandeurs réelles de ton image et :
   - si plus haute que large, choiisir la hauteur de ta picturebox pour la hauteur
   - si plus large que haute : choisir la largeur de ta picturebox pour la largeur
3) une fois ainsi choisie la dimension maximum, pour, selon le cas, la hauteur ou la largeur :
  - appliquer à l'autre dimension le coefficient hauteur/largeur qui permet de garder les mêmes proportions
  - terminer maintenant par paintPocture ou (mieux) par la fonction StretchBlt de l'Api de Windows.

Voilà.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Tiens,

Je t'ai "fabricoté/bâclé" quelque chose en vitesse :

regarde, comprends, et prends ce qui t'intéresse :

dans une form :
un cadre carré appelé Frame 1 (aux dimensions que tou voudras, mais carré !
dans ce cadre frame1, une image image1, aux dimensions que tu voudras (peu importe puisque le programme ajustera) avec la propriété picture = ta photo
ailleurs sur la Form (ou tu voudras et minuscule si tu veux)une image image2
ailleurs sur la Form (ou tu voudras car j'ajuste ensuite) : un bouton command1
où tu voudras : un timer timer1
le temps d'exposition est fixé par exposeconds (ici 3 mais tu peux modifier comme tu l'entends)


Private centre As Integer
Private zou As Integer
Private jmf As Boolean
Const exposeconds = 3
Private Sub Command1_Click()
Dim rapfin As Single
 Image2.Picture = Image1.Picture
 If Image2.Height >= Image2.Width Then
   rapfin = Image2.Width / Image2.Height
   Image1.Height = Frame1.Height
   Image1.Width = Frame1.Height * rapfin
 Else
   rapfin = Image2.Height / Image2.Width
   Image1.Width = Frame1.Width
   Image1.Height = Frame1.Width * rapfin
 End If
 Image1.Left = (Frame1.Width - Image1.Width) / 2
 Image1.Top = (Frame1.Height - Image1.Height) / 2
  Frame1.Left = Me.Width
  zou = Int(centre / 20)
  If Timer1.Enabled = True Then
    Timer1.Enabled = False
  Else
   Timer1.Enabled = True
  End If
End Sub


Private Sub Form_Activate()
  Me.Move 0, 0, Screen.Width, Screen.Height
  centre = Int((Me.Width - Frame1.Width) / 2)
  With Frame1
    .Top = Int((Me.Height - Frame1.Height) / 2)
    .Left = Me.Width
    .Caption = ""
    .BorderStyle = 0
  End With
  Image1.Stretch = True
  Image2.Visible = False
  Command1.Caption = "envoyer photo"
  Command1.Move (Me.Width - Command1.Width) / 2, Me.Height - (Command1.Height * 2)
End Sub


Private Sub Timer1_Timer()
 Dim coucou As Integer, depart As Double
 coucou = 1
 Frame1.Left = Frame1.Left - zou
 zou = zou + coucou
 coucou = coucou + 20 If Frame1.Left <centre And jmf False Then
   Timer1.Enabled = False
   depart = Timer
   While Timer < depart + exposeconds
   Command1.Visible = False
     DoEvents
   Wend
   jmf = True
 End If
 Timer1.Enabled = True
 If Frame1.Left < Me.Left - (Frame1.Width * 2) Then
   Timer1.Enabled = False
   jmf = False
   Command1.Visible = True
 End If
End Sub


Fastoche
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Ouille !

dans ma précipitation et ma focamosation sur les calculs de proportions, j'ai traité une image et pas une picturebox !...

Voilà donc pour une pocturebox :

sur une Form, une pisturebox nommée tremplin et une picturebox nommée Picture1.

Code :

Private Sub Form_Activate()
 Me.Move 0, 0, Screen.Width, Screen.Height
 Picture1.ScaleMode = vbPixels
 tremplin.ScaleMode = vbPixels
 With Frame1
   .Move Me.Width / 10, Me.Height / 10, Me.Width / 2, Me.Width / 2
   .BorderStyle = 0
   .Move (Me.Width - .Width) / 2, (Me.Height - .Height) / 2
 End With
 With tremplin
   .Visible = False
   .AutoSize = True
   .Picture = LoadPicture("d:\superdeb.jpg")  ' remplace ici par le fichier image de ton choix ...
 End With
 Set Picture1.Container = Frame1
 Picture1.Move 0, 0, Frame1.Width, Frame1.Height
 hauteur = tremplin.Height
 largeur = tremplin.Width
 coef = hauteur / largeur
 If hauteur >= largeur Then
   Picture1.Height = Frame1.Height
   Picture1.Width = Frame1.Width / coef
 Else
   Picture1.Width = Frame1.Width
   Picture1.Height = Frame1.Height * coef
 End If
 Picture1.Move (Frame1.Width - Picture1.Width) / 2, (Frame1.Height - Picture1.Height) / 2
 Picture1.AutoRedraw = True
 Picture1.PaintPicture tremplin, 0, 0, Picture1.Width, Picture1.Height, 0, 0, largeur, hauteur
End Sub
Messages postés
19
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
14 mars 2007

salut !
tu as une option dans tes les caractéristique de ton pictures box qui schress (tu a le choix avec title,none,default,schress,etc...) ou un truc dans le genre et cela te la mais a la taille automatic de ta picturebox !
(désolé pour la précison d'ou elle se trouve)
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Jerry regarde que qui a été dit dans la réponse validée, stp.

une PictureBox ne redimentionne pas une image, c'est elle qui se redimentionne à la taille de l'image.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Euh...
C'est quoi, çà, Jerry ?

Tu veux bien "TENTER D'EXPLIQUER" ?
pour rappel : on développe ici sous VB !
Messages postés
19
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
14 mars 2007

désolé casy je n'avais pas lu jusqu'au bout ta réponse !!!
autemp pour moi !
sauf que la méthode stretch permet bien de mettre l'image que tu met dans la picturebox à la taille de celle ci !
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Hola, Jerry !
Ne pas confondre le Stretch que tu fais sur un contrôle image inséré dans un container PictureBox avec un "Stretching" de la  picturebox !
Messages postés
19
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
14 mars 2007

excuse moi je ne suis pas un pro de vb tu peut préciser !!!
merci
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Il n'y a pas grand chose à préciser, Jerry, si ce n'est qu'un contrôle image inséré dans un container picturebox reste et ne sera jamais qu'un contrôle image, pas une picturebox lui-même !!!

Suggestion : regarde dans ton aide en ligne ce qu'est :
- un contrôle image
- un contrôle PictureBox
- un container (qui peut être une Form, un Frame ou une PictureBox).

Je ne vois vraiment pas quoi ajouter... tu me laisses coi !
Messages postés
19
Date d'inscription
vendredi 7 avril 2006
Statut
Membre
Dernière intervention
14 mars 2007

okai je regarderai !
bonne journée