Apo*_*n04 0 c# system.drawing winforms
所以我有一个按一些标准订购的点数列表:
List<System.Drawing.Point> points = new List<System.Drawing.Point>();
System.Drawing.Point prev = new System.Drawing.Point();
Run Code Online (Sandbox Code Playgroud)
我正在使用该列表中最接近的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();
Run Code Online (Sandbox Code Playgroud)
对于908(宽度)x297(高度)像素图像,这段代码需要2-4秒.
我该怎么做才能提高速度?
编辑:发布下面的最终结果.虽然第一种方法仍然允许更精细地操纵图纸.
using (Graphics dr = Graphics.FromImage(img))
dr.DrawLines(bluePen, points.ToArray());
Run Code Online (Sandbox Code Playgroud)
尝试使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |