コード例 #1
0
        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]);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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]);
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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]);
                }
            }
        }