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

Windows Forms Discussion :

Problème de DrawLine : décallage + probleme Zoom sur image lors du DrawImage


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut Problème de DrawLine : décallage + probleme Zoom sur image lors du DrawImage
    Bonjour,

    me voici confronté à un nouveau problème.

    En fait, je suis façe à un probleme de DrawLine, et lorsque je le résoud, un second problème fait surface.

    Pour simplifier l'explication, voici en bref ce que j'aimerais faire :

    J'ai un PictureBox dans lequel je charge une image, en Bitmap.
    (Mon PictureBox se nomme PBMain).
    J'aimerais pouvoir dessiner sur l'image que je charge dans mon picturebox (PBMain.Image) afin d'en enregistrer les modifications. (et ainsi enregistrer une nouvelle image .JPG ou autre...).

    Mais mon probleme se situe ici :
    1) Lorsque je dessine dessus, L'image se duplique et s'agrandit dans ma picturebox PBMain. (Selon la résolution ...).

    2) Lorsque je supprime la ligne suivante pour "corriger le probleme précédent" :
    g.DrawImage(bmpInterne, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);
    Il ne duplique plus l'image, mais alors j'ai un décallage qui se fait entre mon pointeur de souris et là où sont les coordonnées de la souris (et donc ma ligne se dessine plus loin que mon pointeur, en décallage).

    Voici le code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    private bool bMouseDown = false;
            private Point OldPos = new Point(-1, -1);
            private Bitmap bmpInterne = new Bitmap(642, 424);//= new Bitmap(642, 424); // ------------> BITMAP DE TEST
            private Bitmap temp;
            private Color fPenColor = Color.DeepPink; //initialisation de la couleur à rouge
            private Graphics g;
     
     
     
    private void PBMain_MouseDown(object sender, MouseEventArgs e)
            {
                if (PBMain.Image != null)
                {
                    bmpInterne = new Bitmap(PBMain.Image,PBMain.Image.Width, PBMain.Image.Height);
                    //MessageBox.Show("Taille : bmpInt Width = " + bmpInterne.Width + " Height" + bmpInterne.Height, "Error");
                    bMouseDown = true;
                    PBMain.Capture = true;
                    OldPos = new Point(e.X, e.Y);
                }
            }
     
            private void PBMain_MouseUp(object sender, MouseEventArgs e)
            {            
                bMouseDown = false;
                PBMain.Capture = false;
            }
     
            private void PBMain_MouseMove(object sender, MouseEventArgs e)
            {
                if (bMouseDown)
                {
                    bmpInterne = (Bitmap)PBMain.Image;
                    g = Graphics.FromImage(bmpInterne);
                    g.SmoothingMode = SmoothingMode.HighQuality;//SmoothingMode.AntiAlias;                
     
                    Pen pen = new Pen(penColor, 3); //penColor = couleur ; 3 = épaisseur du trait
                    if (OldPos != new Point(-1, -1))
                        g.DrawLine(pen, new Point(e.X, e.Y), OldPos);
     
                    int offsetx = Math.Min(e.X, OldPos.Y);
                    int offsety = Math.Min(e.Y, OldPos.Y);
                    Rectangle rInvalid = new Rectangle(offsetx, offsety, Math.Abs(OldPos.X - e.X), Math.Abs(OldPos.Y - e.Y));
                    rInvalid.Inflate(3, 3);
                    PBMain.Invalidate(rInvalid, true);
                    OldPos = new Point(e.X, e.Y);
                    PBMain.Refresh();
                }
            }
     
            private void PBMain_Paint(object sender, PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                g.DrawImage(bmpInterne, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);
     
            }

    J'ai donc plusieurs questions :

    1) Comment faire pour ne pas que l'image chargée dans ma pictureBox s'agrandisse (si sa résolution n'est pas la meme que la picturebox) lorsque j'appuie sur le bouton gauche de ma souris pour commencer à dessiner ?

    2) Comment faire pour éviter le décallage entre mon pointeur et ce que je dessine exactement ?

    3) Comment faire pour, combiner 2 images lors de l'enregistrement.
    (Car je peux charger mon image, en dessinant sur un objet Graphics qui lui est superposé, mais lors de l'enregistrement, les modifications ne sont pas prises en compte car j'enregistre l'image dans la pictureBox).
    Donc j'aimerais combiner l'image de ma pictureBox avec l'objet graphics sur lequel je dessine.

    D'avance merci pour ceux qui pourront m'éclairer.

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Conseil : n'utilise pas la PictureBox pour faire de la composition d'image.
    Ce contrôle ne sert que si tu veux faire un viewer d'image.
    Fait toi un contrôle perso, ça te simplifiera la vie.

    Pour tes questions :

    1) System.Drawing.Graphics.DrawImage

    2) this.PointToClient (dans ton contrôle)

    3) Aucun de pb si tu utilises un contrôle perso.

  3. #3
    Membre régulier
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Points : 106
    Points
    106
    Par défaut
    Oki, je vais essayer ça ... Mais bon justement, à la base l'applic ne servait qu'a visionner des images. Mais il faut maintenant "griffouiller" dessus

Discussions similaires

  1. [PrestaShop] Problème de zoom sur image fiche produit dans internet explorer
    Par lvain dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 21/02/2014, 16h57
  2. zoom sur image
    Par HiT dans le forum 2D
    Réponses: 8
    Dernier message: 03/04/2008, 00h05
  3. [html][css] 3 lv de zoom sur image sous IE et firefoxe
    Par avogadro dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 10/04/2006, 22h37
  4. [FLASH 8] Zoom sur image
    Par kmomille dans le forum Flash
    Réponses: 6
    Dernier message: 09/03/2006, 14h17
  5. zoom sur image de formulaire
    Par bourvil dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/10/2003, 09h25

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