求助:DrawLine后的笔迹如何保存,如何擦除?
如图,
我在pictureBox中用如下方法绘制了"csdn"的笔迹,
如何将这些笔迹保存,如何删除?
Point[] _p = new Point[0];C# 手写 笔迹 --------------------编程问答-------------------- 最好是画在bitmap上面,将bitmap作为背景图片给picturebox。
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
Array.Resize(ref _p, _p.Length + 1);
_p[_p.GetUpperBound(0)] = new Point(e.X, e.Y);
if (e.Button == MouseButtons.Left && _p.Length > 1)
{
Graphics g = pictureBox1.CreateGraphics();
g.DrawLine(Pens.Red, _p[_p.GetUpperBound(0)], _p[_p.GetUpperBound(0) - 1]);
}
}
擦除:重新new一个bitmap
保存:bitmap.save --------------------编程问答-------------------- 直接pictureBox1.Refresh()就删除了
保存的话,你把MouseMove里的所有经过的点都保存在Point[] pt里,需要时再根据这些点重绘一下 --------------------编程问答-------------------- 像是有这种复杂背景的擦出一般不容易,如果要擦出,用双缓存:
1.先建一Bitmap,将确定的不需要刷除的画在这里,
2.再将这个bitmap画到你的窗体,再将线画到窗体,
3.如果要release重画bitmap,不画你的线。 --------------------编程问答--------------------
画在bitmap上面是什么意思?
不是把图片作为background image放在picturebox里边,然后在picturebox的mouse move事件中绘图吗? --------------------编程问答--------------------
这样整个数组会不会很大啊? --------------------编程问答-------------------- 再大也就是一张图的像素点大小 --------------------编程问答-------------------- 方法一:
鼠标移动时记录笔迹
List<Point> list=new List<Point>();
list.Add(pos);
窗体重画时重绘,OnPaint方法
foreach(Point pos in list)
{
e.Graphics.DrawLine(...,...);
}
方法二:
直接画在图片上Graphics g=Graphics.FromImage(bmp);g.DrawLine(...,...)
窗体重画时重绘图片,OnPaint方法 e.Graphics.DrawImage(bmp,...)
--------------------编程问答-------------------- 我的GDI绘图序列保存加载 http://download.csdn.net/detail/softcreator/5095481
补充:.NET技术 , C#