如题,在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)直线。怎么办?怎么办?
问题应该已经描述清楚了,请教各位大侠,在教师节里,各位也当当好老师吧!
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();
}
调用你应该会吧
嗯嗯,行行行,大侠此招甚妙,多谢多谢!另外,想追问一个,这样实现的的画折线,那么如果是画平滑的曲线呢?(其实我要画的也是曲线)折线直接这样连接起来可以不用考虑节点处的状态,并且还有个DrawLine可以调用,那曲线就都没了。他们是怎么样实现曲线的动态绘制的啊?再次感谢!!
感谢感谢,那个自己知道了,依样画瓢的写了个曲线的,一并贴出来共享吧,分享快乐~
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();
}