如何使用paint事件在面板上手绘?

时间:2017-06-09 21:51:14

标签: c# graphics

所以我意识到:

panel1.CreateGraphics()

被严重瞧不起,但我正在制作一个绘画应用程序而且我看不到其他任何方式,只是因为如果我打电话给panel1.Invalidate();它显然无法保存用户绘制的线条。 所以这是我的代码:

 private void pnlPaintPanel_MouseDown(object sender, MouseEventArgs e)
    {
        shouldPaint = true;
        prePoint = new Point(e.X, e.Y);
    }

    private void pnlPaintPanel_MouseUp(object sender, MouseEventArgs e)
    {
        shouldPaint = false;
    }

    private void pnlPaintPanel_MouseMove(object sender, MouseEventArgs e)
    {
        curPoint = new Point(e.X, e.Y);
        if (shouldPaint)
        {
            pnlPaintPanel.Invalidate();
        }
        prePoint = new Point(e.X, e.Y);
    }

    private void pnlPaintPanel_Paint(object sender, PaintEventArgs e)
    {
        using (Pen p = new Pen(chosenColor, penSize))
        {
            p.StartCap = LineCap.Round;
            p.EndCap = LineCap.Round;
            e.Graphics.DrawLine(p, prePoint, curPoint);
        }

    }

这显然不起作用,因为它只是清除用户立即放下的任何油漆。我确信这是一个聪明的方法;有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到。

  1. 不是直接绘制到面板而是使用Bitmap并使用Graphics.FromImage(来获取图形对象,而只需将面板的背景设置为位图。

    < / LI>
  2. 将所有绘图记录为一系列步骤,然后在每次绘制事件时重新绘制步骤。