IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème affichage d'image dans PictureBox


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Problème affichage d'image dans PictureBox
    Bonjour,

    Je suis en train de développer une petite application en C# dans laquelle j'ai une fenêtre avec un PictureBox où je veux afficher une image. Cette dernière est le résultat d'un traitement qui me donne un graphe orienté et je ne connais pas au préalable la taille de l'image. Au cours de mes tests, j'ai constaté que quand l'image et plus grande que le PictureBox, elle est découpée de chaque coté et ne s'affiche pas par conséquent en entier. j'ai essayé de mettre la propriété SizeMode à "CenterImage", toujours le même problème, à "StretchImage", l'image est agrandie sur toute la surface de le PictureBox ce qui n'est pas adapté pour les petites images, et à "Zoom" qui a à peu près le même effet que "StretchImage".
    J'ai essayé aussi de mettre le PictureBox dans un Panel et j'ai défini sa taille comme celle du Panel. Ensuite j'ai mis Autoscroll = true mais ça n'a rien donné, l'image est maintenant coupée dans le Panel. En plus j'ai essayé de redimensionner la PictureBox avec la même taille que l'image, ça marche bien, avant j'avais le coté gauche coupé, mais maintenant l'image commence de la gauche, c'est le reste de l'image à droite et en bas qui est coupé, et les barres de défilement du panel ne s'affichent pas.
    Aidez moi s'il vous plait, j'ai presque tout essayé et je galère là

    Je vous remercie d'avance pour vos suggestions.

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut probleme d'affichage d'image ,echelle
    bonjour ,
    voici une astuce :
    -dans l'evenement Paint de picturebox,rafraichit l'image en la redessinant et pour l'echelle utilise scaletranform couple à un trackbar comme ca peut importe la taille ,le scaletransform va te permettre d'avoir un viewport independant de la fenetre du picturebox(de l'ecran).
    ainsi tu zoom si le graphe est grand, tu dezoom s'il est petit.

    treves de parlote voici le code,DrawingArea c'est le canvas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     
    Private Sub DrawingArea_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picAireDessin.Paint
            ' ----- Rafraichit la zone de dessin. 
            '
            ' ----- Efface Tout dans le PictureBox.
            e.Graphics.Clear(Color.White)
     
     
            ' ----- Met a l'echelle suivant requete Utilisateur(facteur DisplayScale).
            '------trcAfficheEchelle c'est trackbar        
    e.Graphics.ScaleTransform(trckAfficheEchelle.Value, _
                   trckAfficheEchelle.Value)
     
            ' ----- Recharge l'image(nouvelleImage c'est ton image)
            e.Graphics.DrawImage(nouvelleImage, 0, 0)
                ' ----- Liberes ressources GDI.
            principalFont.Dispose()
            titreFont.Dispose()
     
        End Sub
    tout le probleme va etre de fixer ton viewport reel(qui depend de la taille reelle de ton image).
    la regle :
    - value de trackbar =1 et minimum=1 correspondent a un facteur d'echelle 1(zoom:1) c'est a dire la matrice scaletransform(1,1) laissent width et height reel de l'image.
    - maximum =50(exemple) correspondent a un facteur d'echelle 50(zoom 50) c'est a dire la matrice scaletransform(50,50) multiplie width et height reel de l'image par 100.
    evidemment il faut trouver le compromis parce que un ecran de 800*600 c'est une surface limite et il ne faut pas chercher à y afficher un graphe de 100m x100 m.
    a ce moment divise par un facteur tes unites absolues de calcul des coordonnees.
    anecdote :
    le fameux charles petzold le createur de windows,dans les blogs msdn ,repondait plaisament et poliment a une personne qui avait fait une grande carte et qui ne la voyait sur son ecran, ceci: mois aussi malgre que j'ai chez moi un grand ecran 22 pouces je ne la vois pas egalement.....pour vous dire qu'un ecran est un ecran avec ses dimensions et il faut utiliser le moyen approprie ,la loupe dans certaines situations.
    bon code et bonne annee.....



    -

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Je viens de trouver la solution, après plus d'un jour de recherche et de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ImageWindow.picBox.Width = image.Width;   //Ici le PictureBox aura la même taille  de l'image 
    ImageWindow.picBox.Height = image.Height; //et donc pas de problème d'affichage partiel de l'image
    ImageWindow.picBox.Image = image;          
     
    if (ImageWindow.picBox.Width < ImageWindow.panel1.Width)
                        ImageWindow.picBox.Left = (ImageWindow.panel1.Width - ImageWindow.picBox.Width) / 2;
     
    if (ImageWindow.picBox.Height < ImageWindow.panel1.Height)
                        ImageWindow.picBox.Top = (ImageWindow.panel1.Height - ImageWindow.picBox.Height ) / 2;
    Si la largeur du PictureBox est inférieure à la largeur du Panel, le PictureBox est centré par rapport au Panel à partir de la gauche (Left)

    Si la hauteur du PictureBox est inférieure à la hauteur de Panel, le PictureBox est centré par rapport au Panel à partir du haut (Top)

    Et voilà, j'espère que ça pourra aider d'autres gens qui coincent avec les PictureBox à l'intérieur des Panels.

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut taille d'image et picturebox
    bonjour ,
    Ceci fonctionne bien en ajustant la taille d'image a la taille du panel.
    Mais donnera des distorsions si c'est une image et un effet deseagrable à l'user meme si c'est des figures geometriques,a fortiori une photo.En plus s'il y a beucoup de figures ca va finir par devenir "illisible" indistinguable.

    Par contre la methode ScaleTransforme garde les proportions et si l'utilisateur veut voir un detail il peut agrandir l'echelle c.a.d "zoomer".
    La methode n'est pas specifique au picturebox,elle s'applique meme si tu crees dessine sur usercontrol ou panel .elle est efficace,c'est le fameux "rasoir d'occam" qui coupe tout.
    bonne soiree....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème affichage une image dans une applet
    Par riadhhwajdii dans le forum Applets
    Réponses: 0
    Dernier message: 19/04/2012, 13h45
  2. Problème affichage image dans PictureBox
    Par moufid dans le forum C#
    Réponses: 6
    Dernier message: 30/12/2010, 10h57
  3. Affichage d'image dans PictureBox
    Par red_one dans le forum VB.NET
    Réponses: 9
    Dernier message: 25/11/2010, 19h42
  4. [W3C] problème affichage d'image dans iframe
    Par pas30 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 04/09/2007, 23h30
  5. Probleme affichage image dans picturebox
    Par Julien1987 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/01/2007, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo