提高绘制线的速度

时间:2017-01-17 14:15:47

标签: c# winforms system.drawing

所以我有一个按一些标准订购的点数列表:

List<System.Drawing.Point> points = new List<System.Drawing.Point>();
System.Drawing.Point prev = new System.Drawing.Point();

我正在使用

在该列表中最接近的2个点之间绘制线条
prev = points[0];
System.Diagnostics.Stopwatch s1 = System.Diagnostics.Stopwatch.StartNew();
for (int i = 1; i < points.Count; i++)
{
    var pp = points[i];
    using (Graphics dr = Graphics.FromImage(img))
    {
        dr.DrawLine(bluePen, prev.X, prev.Y, pp.X, pp.Y);
        prev.X = pp.X;
        prev.Y = pp.Y;
    }
}
s1.Stop();

对于908(宽度)x297(高度)像素图像,这段代码需要2-4秒。

我该怎么做才能提高速度?

编辑:在下面发布最终结果。虽然第一种方法仍然允许更精细地操纵图纸。

            using (Graphics dr = Graphics.FromImage(img))
                dr.DrawLines(bluePen, points.ToArray());

1 个答案:

答案 0 :(得分:5)

尝试使用DrawLines并使用一系列点数。那么你可以不用for循环。

Pen bluePen= new Pen(Brushes.DeepSkyBlue);
Image img = Image.FromFile("my_granny.jpg");
List<System.Drawing.Point> points = new List<System.Drawing.Point>();

// fill points here ...

System.Diagnostics.Stopwatch s1 = System.Diagnostics.Stopwatch.StartNew();
using (Graphics dr = Graphics.FromImage(img))
{
    dr.DrawLines(bluePen, points);
}
s1.Stop();

// do something with your img here