清除在C#Windows窗体的图片框上绘制的线条

时间:2018-09-09 17:39:06

标签: c# image winforms graphics

我有一个c#Windows窗体程序,用户可以在其中用鼠标在图片框中的图像上画线。图形应由pictureBox1_Paint方法创建。如何删除画出的线条并保持图像完好无损?

在此处定义默认图片:

public lineTest()
{
 InitializeComponent();
 defaultImage = pictureBox1.Image;
 }    

绘制这样的行:

 private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
            lines.Push(new Line { Start = e.Location });
    }
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        if (lines.Count > 0 && e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            lines.Peek().End = e.Location;
            pictureBox1.Invalidate();
        }
    }

private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        foreach (var line in lines)
        {
            Pen magenta = new Pen(Color.Magenta, 5);

            e.Graphics.DrawLine(magenta, line.Start, line.End);
        }
    }

并尝试通过以下方式删除行:

private void button1_Click(object sender, EventArgs e)
    {
        pictureBox1.Image = defaultImage;
        pictureBox1.Invalidate();
    }

,似乎没有任何反应。

1 个答案:

答案 0 :(得分:2)

每当您使控件无效时,就会调用一次绘制,以便每次都重新绘制线条。在您的button1_Click事件处理程序中,添加以下行:

lines.Clear();

在致电pictureBox1.Invalidate();

之前

这将阻止在下次绘制事件触发时重新绘制线条。