Browse Source

Normalize Deree/Radian calculations

af/merge-core
James Jackson-South 9 years ago
parent
commit
5de8fc7030
  1. 10
      src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLch/CieLabToCieLchConverter.cs
  2. 13
      src/ImageSharp/Common/Helpers/ImageMaths.cs
  3. 6
      src/ImageSharp/Numerics/Point.cs
  4. 30
      src/ImageSharp/Processing/Processors/ColorMatrix/HueProcessor.cs

10
src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLch/CieLabToCieLchConverter.cs

@ -23,11 +23,11 @@ namespace ImageSharp.Colors.Spaces.Conversion.Implementation.CieLch
float hRadians = MathF.Atan2(b, a);
float hDegrees = MathF.RadianToDegree(hRadians);
if (hDegrees > 360)
{
hDegrees -= 360;
}
else if (hDegrees < 0)
// Wrap the angle round at 360.
hDegrees = hDegrees % 360;
// Make sure it's not negative.
while (hDegrees < 0)
{
hDegrees += 360;
}

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

@ -119,19 +119,6 @@ namespace ImageSharp
return 1.0f;
}
/// <summary>
/// Returns the given degrees converted to radians.
/// </summary>
/// <param name="degrees">The angle in degrees.</param>
/// <returns>
/// The <see cref="float"/> representing the degree as radians.
/// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static float DegreesToRadians(float degrees)
{
return degrees * (MathF.PI / 180);
}
/// <summary>
/// Gets the bounding <see cref="Rectangle"/> from the given points.
/// </summary>

6
src/ImageSharp/Numerics/Point.cs

@ -137,7 +137,7 @@ namespace ImageSharp
/// <returns>The rotation <see cref="Matrix3x2"/></returns>
public static Matrix3x2 CreateRotation(Point origin, float degrees)
{
float radians = ImageMaths.DegreesToRadians(degrees);
float radians = MathF.DegreeToRadian(degrees);
return Matrix3x2.CreateRotation(radians, new Vector2(origin.X, origin.Y));
}
@ -173,8 +173,8 @@ namespace ImageSharp
/// <returns>The rotation <see cref="Matrix3x2"/></returns>
public static Matrix3x2 CreateSkew(Point origin, float degreesX, float degreesY)
{
float radiansX = ImageMaths.DegreesToRadians(degreesX);
float radiansY = ImageMaths.DegreesToRadians(degreesY);
float radiansX = MathF.DegreeToRadian(degreesX);
float radiansY = MathF.DegreeToRadian(degreesY);
return Matrix3x2.CreateSkew(radiansX, radiansY, new Vector2(origin.X, origin.Y));
}

30
src/ImageSharp/Processing/Processors/ColorMatrix/HueProcessor.cs

@ -32,13 +32,13 @@ namespace ImageSharp.Processing.Processors
this.Angle = angle;
float radians = ImageMaths.DegreesToRadians(angle);
double cosradians = Math.Cos(radians);
double sinradians = Math.Sin(radians);
float radians = MathF.DegreeToRadian(angle);
float cosradians = MathF.Cos(radians);
float sinradians = MathF.Sin(radians);
float lumR = .213f;
float lumG = .715f;
float lumB = .072f;
float lumR = .213F;
float lumG = .715F;
float lumB = .072F;
float oneMinusLumR = 1 - lumR;
float oneMinusLumG = 1 - lumG;
@ -49,15 +49,15 @@ namespace ImageSharp.Processing.Processors
// Number are taken from https://msdn.microsoft.com/en-us/library/jj192162(v=vs.85).aspx
Matrix4x4 matrix4X4 = new Matrix4x4()
{
M11 = (float)(lumR + (cosradians * oneMinusLumR) - (sinradians * lumR)),
M12 = (float)(lumR - (cosradians * lumR) - (sinradians * 0.143)),
M13 = (float)(lumR - (cosradians * lumR) - (sinradians * oneMinusLumR)),
M21 = (float)(lumG - (cosradians * lumG) - (sinradians * lumG)),
M22 = (float)(lumG + (cosradians * oneMinusLumG) + (sinradians * 0.140)),
M23 = (float)(lumG - (cosradians * lumG) + (sinradians * lumG)),
M31 = (float)(lumB - (cosradians * lumB) + (sinradians * oneMinusLumB)),
M32 = (float)(lumB - (cosradians * lumB) - (sinradians * 0.283)),
M33 = (float)(lumB + (cosradians * oneMinusLumB) + (sinradians * lumB)),
M11 = lumR + (cosradians * oneMinusLumR) - (sinradians * lumR),
M12 = lumR - (cosradians * lumR) - (sinradians * 0.143F),
M13 = lumR - (cosradians * lumR) - (sinradians * oneMinusLumR),
M21 = lumG - (cosradians * lumG) - (sinradians * lumG),
M22 = lumG + (cosradians * oneMinusLumG) + (sinradians * 0.140F),
M23 = lumG - (cosradians * lumG) + (sinradians * lumG),
M31 = lumB - (cosradians * lumB) + (sinradians * oneMinusLumB),
M32 = lumB - (cosradians * lumB) - (sinradians * 0.283F),
M33 = lumB + (cosradians * oneMinusLumB) + (sinradians * lumB),
M44 = 1
};

Loading…
Cancel
Save