当前位置:编程学习 > C#/ASP.NET >>

求助:DrawLine后的笔迹如何保存,如何擦除?


如图,
我在pictureBox中用如下方法绘制了"csdn"的笔迹,
如何将这些笔迹保存,如何删除?
Point[] _p = new Point[0];
        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]);
            }
        }
C# 手写 笔迹 --------------------编程问答-------------------- 最好是画在bitmap上面,将bitmap作为背景图片给picturebox。
擦除:重新new一个bitmap
保存:bitmap.save --------------------编程问答-------------------- 直接pictureBox1.Refresh()就删除了
保存的话,你把MouseMove里的所有经过的点都保存在Point[] pt里,需要时再根据这些点重绘一下 --------------------编程问答-------------------- 像是有这种复杂背景的擦出一般不容易,如果要擦出,用双缓存:
1.先建一Bitmap,将确定的不需要刷除的画在这里,
2.再将这个bitmap画到你的窗体,再将线画到窗体,
3.如果要release重画bitmap,不画你的线。  --------------------编程问答--------------------
引用 1 楼 hjywyj 的回复:
最好是,将bitmap作为背景图片给picturebox。
擦除:重新new一个bitmap
保存:bitmap.save

画在bitmap上面是什么意思?
不是把图片作为background image放在picturebox里边,然后在picturebox的mouse move事件中绘图吗? --------------------编程问答--------------------
引用 2 楼 gxingmin 的回复:
直接pictureBox1.Refresh()就删除了
保存的话,你把MouseMove里的所有经过的点都保存在Point[] pt里,需要时再根据这些点重绘一下

这样整个数组会不会很大啊? --------------------编程问答-------------------- 再大也就是一张图的像素点大小 --------------------编程问答-------------------- 方法一:
鼠标移动时记录笔迹
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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,