2016-10-29 19 views
2

私はPictureboxに割り当てられたイメージを描画するための簡単な例を作成しました。 MouseDownMouseUpというイベントを処理し、現在のマウス位置を取得し、MouseUpイベントの最後に線を描画します。描画と更新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(); 
    } 

コードは動作しますが、それは最初に初期画像の上に常に描画し、私はアップデート(画像上で作成した新しいライン)上に描画したいです。

私の質問がはっきりしたことを願っています。

ありがとうございました。あなたはこれを試すことができ

+0

ないその明確ではありません。そのコードは、画像ボックスの場所を超えて画像を描画していません。 – Plutonix

+0

@Plutonix画像に描画しないということはどういう意味ですか? – Slashy

+0

渡された 'e.Graphics'はコントロールのためのものです。実際のイメージにそれらの行を追加することはありません。それは彼らがイメージの一部であるように見え、それはあなたが望むものであるかもしれません。それは明確ではありません。 – Plutonix

答えて

0

、それは私のために働い:

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; 
} 

また、私はラインをよりスムーズにするために、あなたはMouseMoveイベントを使用をお勧めしたいのthats場合(実際には、あなたがしたいのか分かりませんとにかく)このように:

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; 
     } 
    } 

希望は私はあなたを助けることができる:D

関連する問題