解答: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;//消除锯齿这句我上面的代码里面就有了,这句的效果很明显改进,但是还是不够流畅,我的意思是要从算法上进行改进,比如
用户:*︻$▅▆▇◤ 沧浪翻涌剑留影,空留玉箫无人聆*︻$▅▆▇◤ 得分: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;//消除锯齿这句我上面的代码里面就有了,这句的效果很明显改进,但是还是不够流畅,我的意思是要从算法上进行改进,比如
解答:GDI 实现自由绘图的问题! .NET技术 C# 技术解答社区
微软人工电话:解答关于MSDN和零售版密钥的激活问题_Windows7 中文技术网
基于.Net的AOP实现技术
白玉蜗牛养殖技术专家解答
信用卡的一般问题 解答
C#多线程如何刷新主界面? - .NET技术 / C#
【2007年考研过程全把关—25个问题详细解答】OKhere.net 你来我网-考研社区
javascript和ActiveX的交互问题 .NET技术 / ASP.NET
几个“最困惑问题”的解答
赫然解答世界上著名的诡异问题
对自身一些纠结问题的解答
有关基金拆分问题的解答
步进电机驱动及控制技术解答1
解答英语学习问题
Cygwin 问题及解答
请问double型的数据值范围对小数位数有限制吗? .NET技术 / C#
csdn技术中心 c#实现的18位身份证格式验证算法
C#下用P2P技术实现点对点聊天(1)
关于初学ASP.NET技术的学习顺序问题
关于初学ASP.NET技术的学习顺序问题
P2P海量存储的技术实现问题和市场预测
P2P网络“自由”穿越NAT的“秘密” - 技术文档 - IXPUB技术社区
P2P网络“自由”穿越NAT的“秘密” - 技术文档 - IXPUB技术社区
困惑人生的三十个问题的解答