From fc745bf827589e8755389baf3ea7f0b96ee7c300 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 21 Apr 2017 13:05:11 +1000 Subject: [PATCH 1/2] Add direct reference to System.IO.Compression Classic Net461 apps require this even when referencing NetStandard1.6 when consuming a NetStandard library consuming ImageSharp.... Wut?! --- src/ImageSharp/ImageSharp.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ImageSharp/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj index a19bed604..303e511d7 100644 --- a/src/ImageSharp/ImageSharp.csproj +++ b/src/ImageSharp/ImageSharp.csproj @@ -41,6 +41,7 @@ + ..\..\ImageSharp.ruleset From 1012e57bc429ac67e05c2584b97f6cb7dd499dc4 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 21 Apr 2017 22:28:35 +1000 Subject: [PATCH 2/2] Move SinC to MathF [skip ci] --- src/ImageSharp/Common/Helpers/ImageMaths.cs | 39 +------------------ src/ImageSharp/Common/Helpers/MathF.cs | 38 ++++++++++++++++++ .../Resamplers/Lanczos2Resampler.cs | 2 +- .../Resamplers/Lanczos3Resampler.cs | 2 +- .../Resamplers/Lanczos5Resampler.cs | 2 +- .../Resamplers/Lanczos8Resampler.cs | 2 +- .../Transforms/Resamplers/WelchResampler.cs | 2 +- 7 files changed, 44 insertions(+), 43 deletions(-) diff --git a/src/ImageSharp/Common/Helpers/ImageMaths.cs b/src/ImageSharp/Common/Helpers/ImageMaths.cs index 224b267e4..1be7bd619 100644 --- a/src/ImageSharp/Common/Helpers/ImageMaths.cs +++ b/src/ImageSharp/Common/Helpers/ImageMaths.cs @@ -100,25 +100,6 @@ namespace ImageSharp return 0F; } - /// - /// Gets the result of a sine cardinal function for the given value. - /// - /// The value to calculate the result for. - /// - /// The . - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static float SinC(float x) - { - if (MathF.Abs(x) > Constants.Epsilon) - { - x *= MathF.PI; - return Clean(MathF.Sin(x) / x); - } - - return 1.0f; - } - /// /// Returns the given degrees converted to radians. /// @@ -286,23 +267,5 @@ namespace ImageSharp return GetBoundingRectangle(topLeft, bottomRight); } - - /// - /// Ensures that any passed double is correctly rounded to zero - /// - /// The value to clean. - /// - /// The - /// . - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static float Clean(float x) - { - if (MathF.Abs(x) < Constants.Epsilon) - { - return 0F; - } - - return x; - } } -} +} \ No newline at end of file diff --git a/src/ImageSharp/Common/Helpers/MathF.cs b/src/ImageSharp/Common/Helpers/MathF.cs index 2ee700789..1877fe8af 100644 --- a/src/ImageSharp/Common/Helpers/MathF.cs +++ b/src/ImageSharp/Common/Helpers/MathF.cs @@ -126,6 +126,26 @@ namespace ImageSharp return (float)Math.Sin(f); } + /// + /// Returns the result of a normalized sine cardinal function for the given value. + /// SinC(x) = sin(pi*x)/(pi*x). + /// + /// A single-precision floating-point number to calculate the result for. + /// + /// The sine cardinal of . + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float SinC(float f) + { + if (Abs(f) > Constants.Epsilon) + { + f *= PI; + return Clean(Sin(f) / f); + } + + return 1F; + } + /// Returns the square root of a specified number. /// The number whose square root is to be found. /// @@ -140,5 +160,23 @@ namespace ImageSharp { return (float)Math.Sqrt(f); } + + /// + /// Ensures that any passed float is correctly rounded to zero + /// + /// The value to clean. + /// + /// The + /// . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static float Clean(float x) + { + if (Abs(x) < Constants.Epsilon) + { + return 0F; + } + + return x; + } } } \ No newline at end of file diff --git a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos2Resampler.cs b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos2Resampler.cs index 05d6c630f..a46f38df4 100644 --- a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos2Resampler.cs +++ b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos2Resampler.cs @@ -25,7 +25,7 @@ namespace ImageSharp.Processing if (x < 2F) { - return ImageMaths.SinC(x) * ImageMaths.SinC(x / 2F); + return MathF.SinC(x) * MathF.SinC(x / 2F); } return 0F; diff --git a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos3Resampler.cs b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos3Resampler.cs index 094e5bd67..3ad01b2b7 100644 --- a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos3Resampler.cs +++ b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos3Resampler.cs @@ -25,7 +25,7 @@ namespace ImageSharp.Processing if (x < 3F) { - return ImageMaths.SinC(x) * ImageMaths.SinC(x / 3F); + return MathF.SinC(x) * MathF.SinC(x / 3F); } return 0F; diff --git a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos5Resampler.cs b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos5Resampler.cs index 9022aaaaf..9bb8bdd16 100644 --- a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos5Resampler.cs +++ b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos5Resampler.cs @@ -25,7 +25,7 @@ namespace ImageSharp.Processing if (x < 5F) { - return ImageMaths.SinC(x) * ImageMaths.SinC(x / 5F); + return MathF.SinC(x) * MathF.SinC(x / 5F); } return 0F; diff --git a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos8Resampler.cs b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos8Resampler.cs index 4769d3847..af8c2c111 100644 --- a/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos8Resampler.cs +++ b/src/ImageSharp/Processing/Transforms/Resamplers/Lanczos8Resampler.cs @@ -25,7 +25,7 @@ namespace ImageSharp.Processing if (x < 8F) { - return ImageMaths.SinC(x) * ImageMaths.SinC(x / 8F); + return MathF.SinC(x) * MathF.SinC(x / 8F); } return 0F; diff --git a/src/ImageSharp/Processing/Transforms/Resamplers/WelchResampler.cs b/src/ImageSharp/Processing/Transforms/Resamplers/WelchResampler.cs index 6fafd8ebb..33a2cc825 100644 --- a/src/ImageSharp/Processing/Transforms/Resamplers/WelchResampler.cs +++ b/src/ImageSharp/Processing/Transforms/Resamplers/WelchResampler.cs @@ -24,7 +24,7 @@ namespace ImageSharp.Processing if (x < 3F) { - return ImageMaths.SinC(x) * (1F - (x * x / 9.0F)); + return MathF.SinC(x) * (1F - (x * x / 9F)); } return 0F;