public void ImageShouldBeOverlayedByPath() { string path = TestEnvironment.CreateOutputDirectory("Drawing", "Path"); using (var image = new Image <Rgba32>(500, 500)) { var linerSegemnt = new LinearLineSegment( new Vector2(10, 10), new Vector2(200, 150), new Vector2(50, 300)); var bazierSegment = new CubicBezierLineSegment( new Vector2(50, 300), new Vector2(500, 500), new Vector2(60, 10), new Vector2(10, 400)); var p = new Path(linerSegemnt, bazierSegment); image.Mutate(x => x.BackgroundColor(Rgba32.Blue)); image.Mutate(x => x.Draw(Rgba32.HotPink, 5, p)); image.Save($"{path}/Simple.png"); Buffer2D <Rgba32> sourcePixels = image.GetRootFramePixelBuffer(); Assert.Equal(Rgba32.HotPink, sourcePixels[11, 11]); Assert.Equal(Rgba32.HotPink, sourcePixels[199, 149]); Assert.Equal(Rgba32.Blue, sourcePixels[50, 50]); } }
public void DrawPath <TPixel>(TestImageProvider <TPixel> provider, string colorName, byte alpha, float thickness) where TPixel : unmanaged, IPixel <TPixel> { var linearSegment = new LinearLineSegment( new Vector2(10, 10), new Vector2(200, 150), new Vector2(50, 300)); var bezierSegment = new CubicBezierLineSegment( new Vector2(50, 300), new Vector2(500, 500), new Vector2(60, 10), new Vector2(10, 400)); var path = new Path(linearSegment, bezierSegment); Rgba32 rgba = TestUtils.GetColorByName(colorName); rgba.A = alpha; Color color = rgba; FormattableString testDetails = $"{colorName}_A{alpha}_T{thickness}"; provider.RunValidatingProcessorTest( x => x.Draw(color, thickness, path), testDetails, appendPixelTypeToFileName: false, appendSourceFileOrDescription: false); }
public void ImageShouldBeOverlayedByPath() { string path = TestEnvironment.CreateOutputDirectory("Drawing", "Path"); using (Image <Rgba32> image = new Image <Rgba32>(500, 500)) { LinearLineSegment linerSegemnt = new LinearLineSegment( new Vector2(10, 10), new Vector2(200, 150), new Vector2(50, 300)); CubicBezierLineSegment bazierSegment = new CubicBezierLineSegment(new Vector2(50, 300), new Vector2(500, 500), new Vector2(60, 10), new Vector2(10, 400)); ShapePath p = new ShapePath(linerSegemnt, bazierSegment); image.Mutate(x => x .BackgroundColor(Rgba32.Blue) .Draw(Rgba32.HotPink, 5, p)); image.Save($"{path}/Simple.png"); using (PixelAccessor <Rgba32> sourcePixels = image.Lock()) { Assert.Equal(Rgba32.HotPink, sourcePixels[11, 11]); Assert.Equal(Rgba32.HotPink, sourcePixels[199, 149]); Assert.Equal(Rgba32.Blue, sourcePixels[50, 50]); } } }
public void DrawPath <TPixel>(TestImageProvider <TPixel> provider, string colorName, byte alpha, float thickness) where TPixel : unmanaged, IPixel <TPixel> { var linearSegment = new LinearLineSegment( new Vector2(10, 10), new Vector2(200, 150), new Vector2(50, 300)); var bezierSegment = new CubicBezierLineSegment( new Vector2(50, 300), new Vector2(500, 500), new Vector2(60, 10), new Vector2(10, 400)); var ellipticArcSegment1 = new EllipticalArcLineSegment(80, 425, (float)Math.Sqrt(5525), 40, (float)(Math.Atan2(25, 70) * 180 / Math.PI), -90, -180, Matrix3x2.Identity); var ellipticArcSegment2 = new EllipticalArcLineSegment(150, 520, 140, 70, 0, 180, 360, Matrix3x2.Identity); var path = new Path(linearSegment, bezierSegment, ellipticArcSegment1, ellipticArcSegment2); Rgba32 rgba = TestUtils.GetColorByName(colorName); rgba.A = alpha; Color color = rgba; FormattableString testDetails = $"{colorName}_A{alpha}_T{thickness}"; provider.RunValidatingProcessorTest( x => x.Draw(color, thickness, path), testDetails, appendPixelTypeToFileName: false, appendSourceFileOrDescription: false); }
public void SingleSegmentConstructor() { var segment = new CubicBezierLineSegment(new Vector2(0, 0), new Vector2(10, 0), new Vector2(10, 0), new Vector2(20, 0)); IReadOnlyList <PointF> points = segment.Flatten(); Assert.Contains(new Vector2(0, 0), points); Assert.Contains(new Vector2(10, 0), points); Assert.Contains(new Vector2(20, 0), points); }
public void SingleSegmentConstructor() { CubicBezierLineSegment segment = new CubicBezierLineSegment(new Vector2(0, 0), new Vector2(10, 0), new Vector2(10, 0), new Vector2(20, 0)); var points = segment.Flatten(); Assert.Contains(new Vector2(0, 0), points); Assert.Contains(new Vector2(10, 0), points); Assert.Contains(new Vector2(20, 0), points); }
private void VerifyPoints(PointF[] expectedPoints, IPath path) { Path innerPath = Assert.IsType <Path>(path); ILineSegment segment = Assert.Single(innerPath.LineSegments); CubicBezierLineSegment bezierSegment = Assert.IsType <CubicBezierLineSegment>(segment); Assert.Equal(expectedPoints, bezierSegment.ControlPoints.ToArray()); ISimplePath simplePath = Assert.Single(path.Flatten()); Assert.False(simplePath.IsClosed); }
public void ImageShouldBeOverlayedPathWithOpacity() { string path = TestEnvironment.CreateOutputDirectory("Drawing", "Path"); Rgba32 color = new Rgba32(Rgba32.HotPink.R, Rgba32.HotPink.G, Rgba32.HotPink.B, 150); LinearLineSegment linerSegemnt = new LinearLineSegment( new Vector2(10, 10), new Vector2(200, 150), new Vector2(50, 300) ); CubicBezierLineSegment bazierSegment = new CubicBezierLineSegment(new Vector2(50, 300), new Vector2(500, 500), new Vector2(60, 10), new Vector2(10, 400)); ShapePath p = new ShapePath(linerSegemnt, bazierSegment); using (Image <Rgba32> image = new Image <Rgba32>(500, 500)) { image.Mutate(x => x .BackgroundColor(Rgba32.Blue) .Draw(color, 10, p)); image.Save($"{path}/Opacity.png"); //shift background color towards forground color by the opacity amount Rgba32 mergedColor = new Rgba32(Vector4.Lerp(Rgba32.Blue.ToVector4(), Rgba32.HotPink.ToVector4(), 150f / 255f)); using (PixelAccessor <Rgba32> sourcePixels = image.Lock()) { Assert.Equal(mergedColor, sourcePixels[11, 11]); Assert.Equal(mergedColor, sourcePixels[199, 149]); Assert.Equal(Rgba32.Blue, sourcePixels[50, 50]); } } }