实现Windows画画板那样的功能,可以随手画画,写字,现在的问题是,客户觉得写出来的字不平滑,希望用程序处理一下,请大虾们出出主意,有什么可行的方法解决1.考虑随便乱画,
2.考虑点密集的时候该如何处理
3.可以不考虑曲线实时平滑,如果能行那最好

解决方案 »

  1.   

    你这是后平滑处理写的字
    应该想办法让用户画的时候就是平滑的graphics.SmoothingMode = SmoothingMode.AntiAlias; //抗锯齿
    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; //质量最高
    graphics.CompositingQuality = CompositingQuality.HighQuality;//消除锯齿,最高品质 
      

  2.   

    1、不要跪
    2、可以按一定规则取样(比如频率高的取得快一些)作为控制点,然后用类似bezier等来画平滑曲线。public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.DoubleBuffered = true;
        }    List<Point> points = new List<Point>();
        protected override void OnMouseMove(MouseEventArgs e)
        {
            if (this.Capture)
            {
                Point last = this.points.Count > 0 ? points[points.Count - 1] : new Point(-100,-100);
                // 这里取样规则是下一点离前一点超过一定的距离,可以自己定义。
                if (Math.Abs(e.X - last.X) + Math.Abs(e.Y - last.Y) > 15)
                {
                    points.Add(e.Location);
                    this.Invalidate();
                }
            }
            else
            {
                points.Clear();
            }
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            if (this.points.Count > 2)
            {
                e.Graphics.DrawCurve(Pens.Blue, this.points.ToArray());
            }
        }
    }
      

  3.   

    用WPF做吧,WPF本身自带抗锯齿等让图片平滑的功能
      

  4.   

    楼上两位说的都很对,但是这都是GDI+里面的做法,是我的错,有一点我忘记说了,我用的是WPF,不是winform,wpf中path标签中可以添加polyline对象,该对象是点的集合,效果是点点连接的对象,后来我尝试用贝塞尔曲线完成,这个功能,点很密集的时候基本上没效果上面的意见我会考虑采纳的
      

  5.   

    画的时候用DrawCurve来做,就是平滑的。
      

  6.   

    colinfang2006:
       能不能说的详细一点,
       我现在就是在Canvas上相应move事件来收集点,可以考虑IDynamicObject提出的控制收集点之间的间距来控制点的密度,
      

  7.   

    WPF里面如何实现,同样求解。关键是曲线要平滑无锯齿。