首页 新闻 会员 周边

如何在C#中用GDI+动态的绘制曲线

0
悬赏园豆:20 [已解决问题] 解决于 2011-09-11 10:26

如题,在GDI+中利用多点绘制曲线折线一般用DrawCurve(Pen, Point[])和DrawLines(Pen, Point[])之类的函数,可是这两个函数的第二个参数都要求是纯Point[]数组类型,在绘制动态曲线的时候,显然是要等到程序运行之后才能确定数据,并且数组里的个数也一直在变(第一秒钟有两个点,第二秒钟有三个点,以此类推的增加)。我的想法自然是先定义动态数组 List<Point> myPoints = new List<Point>();需要点的时候直接Add()就行了,但是你把泛型的myPoints传到DrawCurve(Pen, Point[])里面程序是会报错的,myPoints.ToArray();之后也一样不行。
  另外,就算使用下下策最开始的时候定义几个足够大的数组(就暂时不考虑内存浪费了)也不行,比方开始Point[] myPoints=new Point[100](想后面把泛型里面数传会数组)当数组里面的数据点没有100个的时候,里面会有很多的(0,0),那样绘制的曲线后面就有一大堆没用的(0,0)直线。怎么办?怎么办?
  问题应该已经描述清楚了,请教各位大侠,在教师节里,各位也当当好老师吧!

逍遥zw的主页 逍遥zw | 初学一级 | 园豆:182
提问于:2011-09-10 22:17
< >
分享
最佳答案
1
private void DrawLines(Graphics grp, List<Point> pointList)
{
Point one, two;
for (int i = 0; i < pointList.Count-1; i++)
{
one
= pointList[i];
two
= pointList[i + 1];
grp.SmoothingMode
= System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
grp.DrawLine(new Pen(Color.Red, 2), one,two);
}
grp.Dispose();
}

调用你应该会吧

收获园豆:20
artwl | 专家六级 |园豆:16736 | 2011-09-11 08:39

嗯嗯,行行行,大侠此招甚妙,多谢多谢!另外,想追问一个,这样实现的的画折线,那么如果是画平滑的曲线呢?(其实我要画的也是曲线)折线直接这样连接起来可以不用考虑节点处的状态,并且还有个DrawLine可以调用,那曲线就都没了。他们是怎么样实现曲线的动态绘制的啊?再次感谢!!

逍遥zw | 园豆:182 (初学一级) | 2011-09-11 10:01

感谢感谢,那个自己知道了,依样画瓢的写了个曲线的,一并贴出来共享吧,分享快乐~

private void DrawCurves(Graphics grp, List<Point> pointList)
{
Point[] temps
= new Point[pointList.Count];
for (int i = 0; i < pointList.Count; i++)
{
temps[i]
= pointList[i];
}
grp.SmoothingMode
= System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
grp.DrawCurve(
new Pen(Color.Red, 2), temps);
grp.Dispose();
}

逍遥zw | 园豆:182 (初学一级) | 2011-09-11 10:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册