所以我意识到:
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);
}
}
这显然不起作用,因为它只是清除用户立即放下的任何油漆。我确信这是一个聪明的方法;有人可以帮忙吗?
答案 0 :(得分:1)
有两种方法可以做到。
不是直接绘制到面板而是使用Bitmap
并使用Graphics.FromImage(
来获取图形对象,而只需将面板的背景设置为位图。
将所有绘图记录为一系列步骤,然后在每次绘制事件时重新绘制步骤。