mirror of https://github.com/SixLabors/ImageSharp
2 changed files with 310 additions and 0 deletions
@ -0,0 +1,179 @@ |
|||||
|
|
||||
|
namespace ImageSharp.Tests.Drawing.Paths |
||||
|
{ |
||||
|
using System; |
||||
|
|
||||
|
using ImageSharp.Drawing.Brushes; |
||||
|
|
||||
|
using Xunit; |
||||
|
using ImageSharp.Drawing; |
||||
|
using System.Numerics; |
||||
|
using SixLabors.Shapes; |
||||
|
using ImageSharp.Drawing.Processors; |
||||
|
using ImageSharp.Drawing.Pens; |
||||
|
using ImageSharp.PixelFormats; |
||||
|
|
||||
|
public class DrawPathCollection : IDisposable |
||||
|
{ |
||||
|
float thickness = 7.2f; |
||||
|
GraphicsOptions noneDefault = new GraphicsOptions(); |
||||
|
Rgba32 color = Rgba32.HotPink; |
||||
|
SolidBrush<Rgba32> brush = Brushes.Solid(Rgba32.HotPink); |
||||
|
Pen<Rgba32> pen = new Pen<Rgba32>(Rgba32.Gray, 99.9f); |
||||
|
IPath path1 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { |
||||
|
new Vector2(10,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(30,10), |
||||
|
})); |
||||
|
|
||||
|
IPath path2 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { |
||||
|
new Vector2(10,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(30,10), |
||||
|
})); |
||||
|
|
||||
|
IPathCollection pathCollection; |
||||
|
private ProcessorWatchingImage img; |
||||
|
|
||||
|
public DrawPathCollection() |
||||
|
{ |
||||
|
this.pathCollection = new PathCollection(this.path1, this.path2); |
||||
|
this.img = new Paths.ProcessorWatchingImage(10, 10); |
||||
|
} |
||||
|
|
||||
|
public void Dispose() |
||||
|
{ |
||||
|
img.Dispose(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsBrushThicknessAndPath() |
||||
|
{ |
||||
|
img.Draw(brush, thickness, pathCollection); |
||||
|
|
||||
|
Assert.NotEmpty(img.ProcessorApplications); |
||||
|
|
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
DrawPathProcessor<Rgba32> processor = Assert.IsType<DrawPathProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(GraphicsOptions.Default, processor.Options); |
||||
|
|
||||
|
ShapePath shapepath = Assert.IsType<ShapePath>(processor.Path); |
||||
|
Assert.Contains(shapepath.Path, this.pathCollection); |
||||
|
|
||||
|
Pen<Rgba32> pen = Assert.IsType<Pen<Rgba32>>(processor.Pen); |
||||
|
Assert.Equal(brush, pen.Brush); |
||||
|
Assert.Equal(thickness, pen.Width); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsBrushThicknessPathAndOptions() |
||||
|
{ |
||||
|
img.Draw(brush, thickness, pathCollection, noneDefault); |
||||
|
|
||||
|
Assert.NotEmpty(img.ProcessorApplications); |
||||
|
|
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
DrawPathProcessor<Rgba32> processor = Assert.IsType<DrawPathProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(noneDefault, processor.Options); |
||||
|
|
||||
|
ShapePath shapepath = Assert.IsType<ShapePath>(processor.Path); |
||||
|
Assert.Contains(shapepath.Path, pathCollection); |
||||
|
|
||||
|
Pen<Rgba32> pen = Assert.IsType<Pen<Rgba32>>(processor.Pen); |
||||
|
Assert.Equal(brush, pen.Brush); |
||||
|
Assert.Equal(thickness, pen.Width); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsColorThicknessAndPath() |
||||
|
{ |
||||
|
img.Draw(color, thickness, pathCollection); |
||||
|
|
||||
|
Assert.NotEmpty(img.ProcessorApplications); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
DrawPathProcessor<Rgba32> processor = Assert.IsType<DrawPathProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(GraphicsOptions.Default, processor.Options); |
||||
|
|
||||
|
ShapePath shapepath = Assert.IsType<ShapePath>(processor.Path); |
||||
|
Assert.Contains(shapepath.Path, pathCollection); |
||||
|
|
||||
|
Pen<Rgba32> pen = Assert.IsType<Pen<Rgba32>>(processor.Pen); |
||||
|
Assert.Equal(thickness, pen.Width); |
||||
|
|
||||
|
SolidBrush<Rgba32> brush = Assert.IsType<SolidBrush<Rgba32>>(pen.Brush); |
||||
|
Assert.Equal(color, brush.Color); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsColorThicknessPathAndOptions() |
||||
|
{ |
||||
|
img.Draw(color, thickness, pathCollection, noneDefault); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
DrawPathProcessor<Rgba32> processor = Assert.IsType<DrawPathProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(noneDefault, processor.Options); |
||||
|
|
||||
|
ShapePath shapepath = Assert.IsType<ShapePath>(processor.Path); |
||||
|
Assert.Contains(shapepath.Path, pathCollection); |
||||
|
|
||||
|
Pen<Rgba32> pen = Assert.IsType<Pen<Rgba32>>(processor.Pen); |
||||
|
Assert.Equal(thickness, pen.Width); |
||||
|
|
||||
|
SolidBrush<Rgba32> brush = Assert.IsType<SolidBrush<Rgba32>>(pen.Brush); |
||||
|
Assert.Equal(color, brush.Color); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsPenAndPath() |
||||
|
{ |
||||
|
img.Draw(pen, pathCollection); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
DrawPathProcessor<Rgba32> processor = Assert.IsType<DrawPathProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(GraphicsOptions.Default, processor.Options); |
||||
|
|
||||
|
ShapePath shapepath = Assert.IsType<ShapePath>(processor.Path); |
||||
|
Assert.Contains(shapepath.Path, pathCollection); |
||||
|
|
||||
|
Assert.Equal(pen, processor.Pen); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsPenPathAndOptions() |
||||
|
{ |
||||
|
img.Draw(pen, pathCollection, noneDefault); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
DrawPathProcessor<Rgba32> processor = Assert.IsType<DrawPathProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(noneDefault, processor.Options); |
||||
|
|
||||
|
ShapePath shapepath = Assert.IsType<ShapePath>(processor.Path); |
||||
|
Assert.Contains(shapepath.Path, pathCollection); |
||||
|
|
||||
|
Assert.Equal(pen, processor.Pen); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,131 @@ |
|||||
|
|
||||
|
namespace ImageSharp.Tests.Drawing.Paths |
||||
|
{ |
||||
|
using System; |
||||
|
using ImageSharp; |
||||
|
using ImageSharp.Drawing.Brushes; |
||||
|
using Xunit; |
||||
|
using ImageSharp.Drawing; |
||||
|
using System.Numerics; |
||||
|
using SixLabors.Shapes; |
||||
|
using ImageSharp.Drawing.Processors; |
||||
|
using ImageSharp.PixelFormats; |
||||
|
|
||||
|
public class FillPathCollection : IDisposable |
||||
|
{ |
||||
|
GraphicsOptions noneDefault = new GraphicsOptions(); |
||||
|
Rgba32 color = Rgba32.HotPink; |
||||
|
SolidBrush<Rgba32> brush = Brushes.Solid(Rgba32.HotPink); |
||||
|
IPath path1 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { |
||||
|
new Vector2(10,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(30,10), |
||||
|
})); |
||||
|
IPath path2 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { |
||||
|
new Vector2(10,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(20,10), |
||||
|
new Vector2(30,10), |
||||
|
})); |
||||
|
|
||||
|
IPathCollection pathCollection; |
||||
|
|
||||
|
private ProcessorWatchingImage img; |
||||
|
|
||||
|
public FillPathCollection() |
||||
|
{ |
||||
|
this.pathCollection = new PathCollection(path1, path2); |
||||
|
this.img = new ProcessorWatchingImage(10, 10); |
||||
|
} |
||||
|
|
||||
|
public void Dispose() |
||||
|
{ |
||||
|
img.Dispose(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsBrushAndPath() |
||||
|
{ |
||||
|
img.Fill(brush, pathCollection); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
FillRegionProcessor<Rgba32> processor = Assert.IsType<FillRegionProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(GraphicsOptions.Default, processor.Options); |
||||
|
|
||||
|
ShapeRegion region = Assert.IsType<ShapeRegion>(processor.Region); |
||||
|
|
||||
|
// path is converted to a polygon before filling
|
||||
|
Polygon polygon = Assert.IsType<Polygon>(region.Shape); |
||||
|
LinearLineSegment segments = Assert.IsType<LinearLineSegment>(polygon.LineSegments[0]); |
||||
|
|
||||
|
Assert.Equal(brush, processor.Brush); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsBrushPathOptions() |
||||
|
{ |
||||
|
img.Fill(brush, pathCollection, noneDefault); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
FillRegionProcessor<Rgba32> processor = Assert.IsType<FillRegionProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(noneDefault, processor.Options); |
||||
|
|
||||
|
ShapeRegion region = Assert.IsType<ShapeRegion>(processor.Region); |
||||
|
Polygon polygon = Assert.IsType<Polygon>(region.Shape); |
||||
|
LinearLineSegment segments = Assert.IsType<LinearLineSegment>(polygon.LineSegments[0]); |
||||
|
|
||||
|
Assert.Equal(brush, processor.Brush); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsColorAndPath() |
||||
|
{ |
||||
|
img.Fill(color, pathCollection); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
FillRegionProcessor<Rgba32> processor = Assert.IsType<FillRegionProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(GraphicsOptions.Default, processor.Options); |
||||
|
|
||||
|
ShapeRegion region = Assert.IsType<ShapeRegion>(processor.Region); |
||||
|
Polygon polygon = Assert.IsType<Polygon>(region.Shape); |
||||
|
LinearLineSegment segments = Assert.IsType<LinearLineSegment>(polygon.LineSegments[0]); |
||||
|
|
||||
|
SolidBrush<Rgba32> brush = Assert.IsType<SolidBrush<Rgba32>>(processor.Brush); |
||||
|
Assert.Equal(color, brush.Color); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public void CorrectlySetsColorPathAndOptions() |
||||
|
{ |
||||
|
img.Fill(color, pathCollection, noneDefault); |
||||
|
|
||||
|
Assert.Equal(2, img.ProcessorApplications.Count); |
||||
|
for (var i = 0; i < 2; i++) |
||||
|
{ |
||||
|
FillRegionProcessor<Rgba32> processor = Assert.IsType<FillRegionProcessor<Rgba32>>(img.ProcessorApplications[i].processor); |
||||
|
|
||||
|
Assert.Equal(noneDefault, processor.Options); |
||||
|
|
||||
|
ShapeRegion region = Assert.IsType<ShapeRegion>(processor.Region); |
||||
|
Polygon polygon = Assert.IsType<Polygon>(region.Shape); |
||||
|
LinearLineSegment segments = Assert.IsType<LinearLineSegment>(polygon.LineSegments[0]); |
||||
|
|
||||
|
SolidBrush<Rgba32> brush = Assert.IsType<SolidBrush<Rgba32>>(processor.Brush); |
||||
|
Assert.Equal(color, brush.Color); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue