diff --git a/src/ImageSharp/Common/Helpers/ImageMaths.cs b/src/ImageSharp/Common/Helpers/ImageMaths.cs index 3cfea581d..6583fb724 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/ImageSharp.csproj b/src/ImageSharp/ImageSharp.csproj index bda5f7c39..64183d05c 100644 --- a/src/ImageSharp/ImageSharp.csproj +++ b/src/ImageSharp/ImageSharp.csproj @@ -41,6 +41,7 @@ + ..\..\ImageSharp.ruleset 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;