Browse Source

Merge remote-tracking branch 'refs/remotes/origin/master' into feature/rename-color

af/merge-core
James Jackson-South 9 years ago
parent
commit
addc9e098a
  1. 39
      src/ImageSharp/Common/Helpers/ImageMaths.cs
  2. 38
      src/ImageSharp/Common/Helpers/MathF.cs
  3. 1
      src/ImageSharp/ImageSharp.csproj
  4. 2
      src/ImageSharp/Processing/Transforms/Resamplers/Lanczos2Resampler.cs
  5. 2
      src/ImageSharp/Processing/Transforms/Resamplers/Lanczos3Resampler.cs
  6. 2
      src/ImageSharp/Processing/Transforms/Resamplers/Lanczos5Resampler.cs
  7. 2
      src/ImageSharp/Processing/Transforms/Resamplers/Lanczos8Resampler.cs
  8. 2
      src/ImageSharp/Processing/Transforms/Resamplers/WelchResampler.cs

39
src/ImageSharp/Common/Helpers/ImageMaths.cs

@ -100,25 +100,6 @@ namespace ImageSharp
return 0F; return 0F;
} }
/// <summary>
/// Gets the result of a sine cardinal function for the given value.
/// </summary>
/// <param name="x">The value to calculate the result for.</param>
/// <returns>
/// The <see cref="float"/>.
/// </returns>
[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;
}
/// <summary> /// <summary>
/// Returns the given degrees converted to radians. /// Returns the given degrees converted to radians.
/// </summary> /// </summary>
@ -286,23 +267,5 @@ namespace ImageSharp
return GetBoundingRectangle(topLeft, bottomRight); return GetBoundingRectangle(topLeft, bottomRight);
} }
/// <summary>
/// Ensures that any passed double is correctly rounded to zero
/// </summary>
/// <param name="x">The value to clean.</param>
/// <returns>
/// The <see cref="float"/>
/// </returns>.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static float Clean(float x)
{
if (MathF.Abs(x) < Constants.Epsilon)
{
return 0F;
}
return x;
}
} }
} }

38
src/ImageSharp/Common/Helpers/MathF.cs

@ -126,6 +126,26 @@ namespace ImageSharp
return (float)Math.Sin(f); return (float)Math.Sin(f);
} }
/// <summary>
/// Returns the result of a normalized sine cardinal function for the given value.
/// SinC(x) = sin(pi*x)/(pi*x).
/// </summary>
/// <param name="f">A single-precision floating-point number to calculate the result for.</param>
/// <returns>
/// The sine cardinal of <paramref name="f" />.
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float SinC(float f)
{
if (Abs(f) > Constants.Epsilon)
{
f *= PI;
return Clean(Sin(f) / f);
}
return 1F;
}
/// <summary>Returns the square root of a specified number.</summary> /// <summary>Returns the square root of a specified number.</summary>
/// <param name="f">The number whose square root is to be found. </param> /// <param name="f">The number whose square root is to be found. </param>
/// <returns> /// <returns>
@ -140,5 +160,23 @@ namespace ImageSharp
{ {
return (float)Math.Sqrt(f); return (float)Math.Sqrt(f);
} }
/// <summary>
/// Ensures that any passed float is correctly rounded to zero
/// </summary>
/// <param name="x">The value to clean.</param>
/// <returns>
/// The <see cref="float"/>
/// </returns>.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static float Clean(float x)
{
if (Abs(x) < Constants.Epsilon)
{
return 0F;
}
return x;
}
} }
} }

1
src/ImageSharp/ImageSharp.csproj

@ -41,6 +41,7 @@
<PackageReference Include="System.Threading.Tasks.Parallel" Version="4.3.0" /> <PackageReference Include="System.Threading.Tasks.Parallel" Version="4.3.0" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.3.0" /> <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="4.3.0" />
<PackageReference Include="System.Numerics.Vectors" Version="4.3.0" /> <PackageReference Include="System.Numerics.Vectors" Version="4.3.0" />
<PackageReference Include="System.IO.Compression" Version="4.3.0" />
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup>
<CodeAnalysisRuleSet>..\..\ImageSharp.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>..\..\ImageSharp.ruleset</CodeAnalysisRuleSet>

2
src/ImageSharp/Processing/Transforms/Resamplers/Lanczos2Resampler.cs

@ -25,7 +25,7 @@ namespace ImageSharp.Processing
if (x < 2F) if (x < 2F)
{ {
return ImageMaths.SinC(x) * ImageMaths.SinC(x / 2F); return MathF.SinC(x) * MathF.SinC(x / 2F);
} }
return 0F; return 0F;

2
src/ImageSharp/Processing/Transforms/Resamplers/Lanczos3Resampler.cs

@ -25,7 +25,7 @@ namespace ImageSharp.Processing
if (x < 3F) if (x < 3F)
{ {
return ImageMaths.SinC(x) * ImageMaths.SinC(x / 3F); return MathF.SinC(x) * MathF.SinC(x / 3F);
} }
return 0F; return 0F;

2
src/ImageSharp/Processing/Transforms/Resamplers/Lanczos5Resampler.cs

@ -25,7 +25,7 @@ namespace ImageSharp.Processing
if (x < 5F) if (x < 5F)
{ {
return ImageMaths.SinC(x) * ImageMaths.SinC(x / 5F); return MathF.SinC(x) * MathF.SinC(x / 5F);
} }
return 0F; return 0F;

2
src/ImageSharp/Processing/Transforms/Resamplers/Lanczos8Resampler.cs

@ -25,7 +25,7 @@ namespace ImageSharp.Processing
if (x < 8F) if (x < 8F)
{ {
return ImageMaths.SinC(x) * ImageMaths.SinC(x / 8F); return MathF.SinC(x) * MathF.SinC(x / 8F);
} }
return 0F; return 0F;

2
src/ImageSharp/Processing/Transforms/Resamplers/WelchResampler.cs

@ -24,7 +24,7 @@ namespace ImageSharp.Processing
if (x < 3F) if (x < 3F)
{ {
return ImageMaths.SinC(x) * (1F - (x * x / 9.0F)); return MathF.SinC(x) * (1F - (x * x / 9F));
} }
return 0F; return 0F;

Loading…
Cancel
Save