Beispiel #1
0
        public void ImageShouldDrawTransformedImage <TPixel>(TestImageProvider <TPixel> provider, PixelBlenderMode mode)
            where TPixel : struct, IPixel <TPixel>
        {
            using (Image <TPixel> image = provider.GetImage())
                using (var blend = Image.Load <TPixel>(TestFile.Create(TestImages.Bmp.Car).Bytes))
                {
                    Matrix3x2 rotate = Matrix3x2Extensions.CreateRotationDegrees(45F);
                    Matrix3x2 scale  = Matrix3x2Extensions.CreateScale(new SizeF(.25F, .25F));
                    Matrix3x2 matrix = rotate * scale;

                    // Lets center the matrix so we can tell whether any cut-off issues we may have belong to the drawing processor
                    Rectangle srcBounds      = blend.Bounds();
                    Rectangle destBounds     = TransformHelpers.GetTransformedBoundingRectangle(srcBounds, matrix);
                    Matrix3x2 centeredMatrix = TransformHelpers.GetCenteredTransformMatrix(srcBounds, destBounds, matrix);

                    // We pass a new rectangle here based on the dest bounds since we've offset the matrix
                    blend.Mutate(x => x.Transform(
                                     centeredMatrix,
                                     KnownResamplers.Bicubic,
                                     new Rectangle(0, 0, destBounds.Width, destBounds.Height)));

                    var position = new Point((image.Width - blend.Width) / 2, (image.Height - blend.Height) / 2);
                    image.Mutate(x => x.DrawImage(blend, mode, .75F, position));
                    image.DebugSave(provider, new[] { "Transformed" });
                }
        }
Beispiel #2
0
        /// <inheritdoc/>
        protected override Size GetTransformedDimensions(Size sourceDimensions, Matrix3x2 matrix)
        {
            var sourceRectangle = new Rectangle(0, 0, sourceDimensions.Width, sourceDimensions.Height);

            if (!Matrix3x2.Invert(this.TransformMatrix, out Matrix3x2 sizeMatrix))
            {
                // TODO: Shouldn't we throw an exception instead?
                return(sourceDimensions);
            }

            return(TransformHelpers.GetTransformedBoundingRectangle(sourceRectangle, sizeMatrix).Size);
        }
Beispiel #3
0
        public void Transform_DoesNotCreateEdgeArtifacts <TPixel>(TestImageProvider <TPixel> provider, string resamplerName)
            where TPixel : struct, IPixel <TPixel>
        {
            IResampler resampler = GetResampler(resamplerName);

            using (Image <TPixel> image = provider.GetImage())
            {
                var rotate    = Matrix3x2.CreateRotation((float)Math.PI / 4F, new Vector2(5 / 2F, 5 / 2F));
                var translate = Matrix3x2.CreateTranslation((7 - 5) / 2F, (7 - 5) / 2F);

                Rectangle sourceRectangle = image.Bounds();
                Matrix3x2 matrix          = rotate * translate;

                Rectangle destRectangle = TransformHelpers.GetTransformedBoundingRectangle(sourceRectangle, matrix);

                image.Mutate(c => c.Transform(matrix, resampler, destRectangle));
                image.DebugSave(provider, resamplerName);

                VerifyAllPixelsAreWhiteOrTransparent(image);
            }
        }
        private static Size GetTransformedDimensions(Size sourceDimensions, Matrix3x2 matrix)
        {
            var sourceRectangle = new Rectangle(0, 0, sourceDimensions.Width, sourceDimensions.Height);

            return(TransformHelpers.GetTransformedBoundingRectangle(sourceRectangle, matrix).Size);
        }
Beispiel #5
0
 /// <inheritdoc/>
 protected override Rectangle GetTransformedBoundingRectangle(Rectangle sourceRectangle, Matrix4x4 matrix)
 {
     return(Matrix4x4.Invert(this.TransformMatrix, out Matrix4x4 sizeMatrix)
         ? TransformHelpers.GetTransformedBoundingRectangle(sourceRectangle, sizeMatrix)
         : sourceRectangle);
 }
Beispiel #6
0
        /// <inheritdoc/>
        protected override Size GetTransformedDimensions(Size sourceDimensions, Matrix3x2 matrix)
        {
            var sourceRectangle = new Rectangle(0, 0, sourceDimensions.Width, sourceDimensions.Height);

            return(TransformHelpers.GetTransformedBoundingRectangle(sourceRectangle, this.TransformMatrix).Size);
        }