Skip to content

Commit 0e0d9bf

Browse files
committed
Reduce ILineSegment[] copies for Path classes
1 parent 5703f58 commit 0e0d9bf

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

src/ImageSharp.Drawing/Shapes/Path.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public virtual IPath Transform(Matrix3x2 matrix)
101101

102102
ILineSegment[] segments = new ILineSegment[this.lineSegments.Length];
103103

104-
for (int i = 0; i < this.LineSegments.Count; i++)
104+
for (int i = 0; i < segments.Length; i++)
105105
{
106106
segments[i] = this.lineSegments[i].Transform(matrix);
107107
}

src/ImageSharp.Drawing/Shapes/PathBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ private class Figure
465465

466466
public IPath Build()
467467
=> this.IsClosed
468-
? new Polygon(this.segments.ToArray())
468+
? new Polygon(this.segments.ToArray(), true)
469469
: new Path(this.segments.ToArray());
470470
}
471471
}

src/ImageSharp.Drawing/Shapes/Polygon.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public Polygon(PointF[] points)
2424
/// </summary>
2525
/// <param name="segments">The segments.</param>
2626
public Polygon(params ILineSegment[] segments)
27-
: base((IEnumerable<ILineSegment>)segments)
27+
: base(segments.ToArray())
2828
{
2929
}
3030

@@ -55,6 +55,11 @@ internal Polygon(Path path)
5555
{
5656
}
5757

58+
internal Polygon(ILineSegment[] segments, bool owned)
59+
: base(owned ? segments : segments.ToArray())
60+
{
61+
}
62+
5863
/// <inheritdoc />
5964
public override bool IsClosed => true;
6065

@@ -66,13 +71,13 @@ public override IPath Transform(Matrix3x2 matrix)
6671
return this;
6772
}
6873

69-
var segments = new ILineSegment[this.LineSegments.Count];
70-
int i = 0;
71-
foreach (ILineSegment s in this.LineSegments)
74+
ILineSegment[] segments = new ILineSegment[this.LineSegments.Count];
75+
76+
for (int i = 0; i < segments.Length; i++)
7277
{
73-
segments[i++] = s.Transform(matrix);
78+
segments[i] = this.LineSegments[i].Transform(matrix);
7479
}
7580

76-
return new Polygon(segments);
81+
return new Polygon(segments, true);
7782
}
7883
}

0 commit comments

Comments
 (0)