2016-10-29 5 views
2

Ich habe ein einfaches Beispiel erstellt, um ein Bild zu zeichnen, das einem Picturebox zugewiesen wurde. Ich handhabe die MouseDown und MouseUp Ereignisse, die aktuelle Mausposition abrufen und zeichnen Sie eine Zeile am Ende eines MouseUp Ereignisses.Zeichnen und aktualisieren PictureBox

private void Form1_Load(object sender, EventArgs e) 
    { 
     Bitmap image = new Bitmap("myImage.png"); 
     pictureBox1.Image = image; 
    } 

    Point From, To; 
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     From = new Point(e.X, e.Y); 
    } 

    private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.DrawLine(Pens.Red, From, To); 
    } 

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     To = new Point(e.X, e.Y); 
     pictureBox1.Refresh(); 
    } 

Der Code funktioniert, aber es zieht immer auf dem ersten Anfangsbild, ich will auf der Updates (die neuen Linien auf dem Bild erstellt wird) zeichnen.

Ich hoffe, meine Frage war klar.

Danke.

+0

Nein es ist nicht klar. Dieser Code zeichnet nicht zum Bild, sondern über den Ort der Bilderbox. – Plutonix

+0

@Plutonix Was meinst du damit, überhaupt kein Bild zu zeichnen? – Slashy

+0

Das übergebene 'e.Graphics' ist für die Kontrolle, es wird diese Linie nicht zum tatsächlichen Bild hinzufügen. Es sieht so aus, als wären sie Teil des Bildes und das mag was du willst, es ist nicht klar – Plutonix

Antwort

0

Sie können dies versuchen, es für mich gearbeitet:

Graphics graph = Graphics.FromImage(image); 
if (e.Button == MouseButtons.Left) 
{ 
    graph.DrawLine(Pens.Red, From.X, From.Y, e.X, e.Y); 
    pictureBox1.Image = image; 
} 

Zusätzlich würde ich empfehlen, verwenden Sie die MouseMove Veranstaltung zu machen Linien glatter (weiß nicht wirklich, ob das ist, was Sie wollen, aber trotzdem) wie folgt aus:

int x, y; 

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     x = e.X; 
     y = e.Y; 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     Graphics graph = Graphics.FromImage(image); 
     if (e.Button == MouseButtons.Left) 
     { 
      graph.DrawLine(Pens.Red, x, y, e.X, e.Y); 
      pictureBox1.Image = image; 
      x = e.X; 
      y = e.Y; 
     } 
    } 

Hoffnung, ich könnte Ihnen helfen: D