From 201e4f43bddf180c87e91d80933823d162795270 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Wed, 20 Dec 2017 18:35:30 +0100 Subject: [PATCH] more/better TransformTests --- .../Processing/Transforms/TransformTests.cs | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/tests/ImageSharp.Tests/Processing/Transforms/TransformTests.cs b/tests/ImageSharp.Tests/Processing/Transforms/TransformTests.cs index 54a3af36fd..59a16eb78d 100644 --- a/tests/ImageSharp.Tests/Processing/Transforms/TransformTests.cs +++ b/tests/ImageSharp.Tests/Processing/Transforms/TransformTests.cs @@ -10,6 +10,8 @@ using Xunit.Abstractions; namespace SixLabors.ImageSharp.Tests.Processing.Transforms { + using SixLabors.ImageSharp.Helpers; + public class TransformTests { private readonly ITestOutputHelper Output; @@ -17,7 +19,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms public static readonly TheoryData TransformValues = new TheoryData { + { 0, 1, 1, 0, 0 }, + { 50, 1, 1, 0, 0 }, + { 0, 1, 1, 20, 10 }, { 50, 1, 1, 20, 10 }, + { 0, 1, 1, -20, -10 }, { 50, 1, 1, -20, -10 }, { 50, 1.5f, 1.5f, 0, 0 }, { 0, 2f, 1f, 0, 0 }, @@ -75,7 +81,30 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms [Theory] [WithTestPatternImages(nameof(TransformValues), 100, 50, PixelTypes.Rgba32)] - public void Transform_RotateScaleTranslate( + public void Transform_RotateScaleTranslate_AutoDestRectangle( + TestImageProvider provider, + float angleDeg, + float sx, float sy, + float tx, float ty) + where TPixel : struct, IPixel + { + using (Image image = provider.GetImage()) + { + Matrix3x2 rotate = Matrix3x2Extensions.CreateRotationDegrees(angleDeg); + var translate = Matrix3x2.CreateTranslation(tx, ty); + var scale = Matrix3x2.CreateScale(sx, sy); + Matrix3x2 m = rotate * scale * translate; + + this.PrintMatrix(m); + + image.Mutate(i => i.Transform(m, KnownResamplers.Bicubic)); + image.DebugSave(provider, $"R({angleDeg})_S({sx},{sy})_T({tx},{ty})"); + } + } + + [Theory] + [WithTestPatternImages(nameof(TransformValues), 100, 50, PixelTypes.Rgba32)] + public void Transform_RotateScaleTranslate_SameDestRectangle( TestImageProvider provider, float angleDeg, float sx, float sy, @@ -89,13 +118,15 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms var scale = Matrix3x2.CreateScale(sx, sy); Matrix3x2 m = rotate * scale * translate; - this.Output.WriteLine(m.ToString()); + this.PrintMatrix(m); - image.Mutate(i => i.Transform(m)); + Rectangle destBounds = image.Bounds(); + image.Mutate(i => i.Transform(m, KnownResamplers.Bicubic, destBounds)); image.DebugSave(provider, $"R({angleDeg})_S({sx},{sy})_T({tx},{ty})"); } } + [Theory] [WithTestPatternImages(nameof(ResamplerNames), 100, 200, PixelTypes.Rgba32)] public void Transform_WithSampler(TestImageProvider provider, string resamplerName) @@ -141,5 +172,11 @@ namespace SixLabors.ImageSharp.Tests.Processing.Transforms Assert.Equal(white, rgba.Rgb); } } + + private void PrintMatrix(Matrix3x2 a) + { + string s = $"{a.M11:F10},{a.M12:F10},{a.M21:F10},{a.M22:F10},{a.M31:F10},{a.M32:F10}"; + this.Output.WriteLine(s); + } } } \ No newline at end of file