所以我有一个按一些标准订购的点数列表:
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());
答案 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