解答:GDI 实现自由绘图的问题! .NET技术 C# 技术解答社区

来源:百度文库 编辑:神马文学网 时间:2024/06/02 21:11:05
内容:我想用GDI+实现类似XP自带的画图软件里面的自由画笔功能,鼠标拖拉就能画画。起初想法是用MouseMove事件里面每隔一段小的时间就会自动识别一次鼠标的位置,把每两个鼠标位置用直线连接起来就可以实现画图功能了。但是出来效果很差,画起来很不流畅。现在我该用Bezier曲线,每收集4个点,就用Bezier曲线连接起来,但是效果还是不够好,转弯的时候很不流畅。我附上MouseMove里面的代码。不知道哪位仁兄做过类似的编程或者经验,能给我一些改进方法,让画笔更加流畅,能有点书法的收尾效果就最好了。万分感谢!private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e){if(dragMode)//dragMode=true表示已经按下鼠标左键拖拉{//每收集4个点画一条Bezier曲线if(nowpoint<4){pp[nowpoint].X=e.X;pp[nowpoint].Y=e.Y;nowpoint++;}if(nowpoint==4){Graphics g1= this.CreateGraphics();g1.SmoothingMode=SmoothingMode.AntiAlias;g1.PixelOffsetMode=PixelOffsetMode.HighQuality;Pen linePen=new Pen(Color.Red,4);//g1.DrawLines(pointPen,pp);g1.DrawBezier(linePen, pp[0], pp[1], pp[2], pp[3]);//画Bezier曲线//更新点集pp[0].X=e.X;pp[0].Y=e.Y;nowpoint=1;g1.Dispose();pointPen.Dispose();linePen.Dispose();}}
用户:*︻$▅▆▇◤ 沧浪翻涌剑留影,空留玉箫无人聆*︻$▅▆▇◤      得分:0
内容:
Drawtools绘制图形并可以拖动调整http://www.codeproject.com/csharp/drawtools.asp增强型Drawtools可以插入图片....http://www.codeproject.com/useritems/DrawToolsRedux.asp==================================================================博客空间:http://blog.csdn.net/lovingkiss资源下载:http://download.csdn.net/user/lovingkissEmail:loving-kiss@163.com优惠接单开发,收费带初学者,组件控件定制开发,成品源代码批发联系方式:Q64180940(请清楚注明业务还是技术咨询) 全天在线==================================================================
用户:平民百姓-自已动手,丰衣足食      得分:0
内容:
参考下面的代码(VS2005):class drawPoints:Form{private Point m_Start;private List m_ListPoint;public drawPoints(){this.DoubleBuffered = true;m_ListPoint = new List();}protected override void OnMouseDown(MouseEventArgs e){base.OnMouseDown(e);this.m_Start = e.Location;}protected override void OnMouseMove(MouseEventArgs e){base.OnMouseMove(e);if (e.Button == MouseButtons.Left){this.m_ListPoint.Add(e.Location);this.m_Start = e.Location;this.Invalidate();}}protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);for (int i = 0; i < this.m_ListPoint.Count-1; i++){e.Graphics.DrawLine(SystemPens.ControlText, this.m_ListPoint[i], this.m_ListPoint[i + 1]);}}}
用户:      得分:0
内容:
谢谢两位大大的回帖to lovingkiss:你给的网站挺不错,不过我得花时间慢慢看,谢谢!to hbxtlhx:你给的代码和我起初的思想差不多,如果我没有理解错的话,都是用DrawLine来实现自由绘图,但是我试过效果不是很好,在画笔转弯的时候效果很差,不够光滑。不知道你有没有更好的见解呢?谢谢你!^_^
用户:一剑飘红      得分:0
内容:
protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);for (int i = 0; i < this.m_ListPoint.Count-1; i++){e.Graphics.DrawLine(SystemPens.ControlText, this.m_ListPoint[i], this.m_ListPoint[i + 1]);}}}中加一句代码protected override void OnPaint(PaintEventArgs e){base.OnPaint(e);e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//消除锯齿for (int i = 0; i < this.m_ListPoint.Count - 1; i++){e.Graphics.DrawLine(SystemPens.ControlText, this.m_ListPoint[i], this.m_ListPoint[i + 1]);}}e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//消除锯齿这句我上面的代码里面就有了,这句的效果很明显改进,但是还是不够流畅,我的意思是要从算法上进行改进,比如