diff --git a/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs b/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs index 5c7de1710..b1d7b61ee 100644 --- a/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs +++ b/src/ImageSharp/Processing/Processors/Transforms/TransformUtilities.cs @@ -19,7 +19,7 @@ internal static class TransformUtilities /// /// The transform matrix. public static bool IsDegenerate(Matrix3x2 matrix) - => IsNaN(matrix) || IsZero(matrix.GetDeterminant()); + => IsNaN(matrix) || matrix.GetDeterminant() == 0F; /// /// Returns a value that indicates whether the specified matrix is degenerate @@ -28,11 +28,7 @@ internal static class TransformUtilities /// /// The transform matrix. public static bool IsDegenerate(Matrix4x4 matrix) - => IsNaN(matrix) || IsZero(matrix.GetDeterminant()); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static bool IsZero(float a) - => a > -Constants.EpsilonSquared && a < Constants.EpsilonSquared; + => IsNaN(matrix) || matrix.GetDeterminant() == 0F; /// /// Returns a value that indicates whether the specified matrix contains any values diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs index 7389c4b89..4214cc5e0 100644 --- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs +++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs @@ -699,6 +699,20 @@ public class ResizeTests appendSourceFileOrDescription: false); } + [Theory] + [InlineData(1024)] + [InlineData(2048)] + public void Issue3156_CanResizeLargeSquareToSinglePixel(int length) + { + Rgba32 white = Color.White.ToPixel(); + using Image image = new(length, length, white); + + image.Mutate(x => x.Resize(1, 1)); + + Assert.Equal(new Size(1, 1), image.Size); + Assert.Equal(white, image[0, 0]); + } + [Theory] [WithTestPatternImages(100, 100, PixelTypes.Rgba32)] public void ResizeUpdatesSubject(TestImageProvider provider)