Browse Source

Normalise inlining, remove flaky test.

af/merge-core
James Jackson-South 8 years ago
parent
commit
d7fa371793
  1. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CIeLchToCieLabConverter.cs
  2. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLabToCieLchConverter.cs
  3. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLabToCieXyzConverter.cs
  4. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuvToCieLuvConverter.cs
  5. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuvToCieLchuvConverter.cs
  6. 16
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuvToCieXyzConverter.cs
  7. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzAndCieXyyConverter.cs
  8. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzAndHunterLabConverterBase.cs
  9. 6
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzAndLmsConverter.cs
  10. 9
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToCieLabConverter.cs
  11. 18
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToCieLuvConverter.cs
  12. 9
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToHunterLabConverter.cs
  13. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToLinearRgbConverter.cs
  14. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CmykAndRgbConverter.cs
  15. 26
      src/ImageSharp/ColorSpaces/Conversion/Implementation/GammaCompanding.cs
  16. 12
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HslAndRgbConverter.cs
  17. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HsvAndRgbConverter.cs
  18. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLabToCieXyzConverter.cs
  19. 8
      src/ImageSharp/ColorSpaces/Conversion/Implementation/LCompanding.cs
  20. 1
      src/ImageSharp/ColorSpaces/Conversion/Implementation/LinearRgbAndCieXyzConverterBase.cs
  21. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/LinearRgbToCieXyzConverter.cs
  22. 3
      src/ImageSharp/ColorSpaces/Conversion/Implementation/LinearRgbToRgbConverter.cs
  23. 1
      src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs
  24. 3
      src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs
  25. 12
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rec2020Companding.cs
  26. 12
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rec709Companding.cs
  27. 3
      src/ImageSharp/ColorSpaces/Conversion/Implementation/RgbToLinearRgbConverter.cs
  28. 3
      src/ImageSharp/ColorSpaces/Conversion/Implementation/RgbWorkingSpace.cs
  29. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/YCbCrAndRgbConverter.cs
  30. 4
      src/ImageSharp/Common/Helpers/InliningOptions.cs
  31. 1
      tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/CIeLchToCieLabConverter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieLab Convert(in CieLch input) public CieLab Convert(in CieLch input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLabToCieLchConverter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieLch Convert(in CieLab input) public CieLch Convert(in CieLab input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:
@ -27,7 +27,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
float hDegrees = MathFExtensions.RadianToDegree(hRadians); float hDegrees = MathFExtensions.RadianToDegree(hRadians);
// Wrap the angle round at 360. // Wrap the angle round at 360.
hDegrees = hDegrees % 360; hDegrees %= 360;
// Make sure it's not negative. // Make sure it's not negative.
while (hDegrees < 0) while (hDegrees < 0)

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLabToCieXyzConverter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieXyz Convert(in CieLab input) public CieXyz Convert(in CieLab input)
{ {
// Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_Lab_to_XYZ.html // Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_Lab_to_XYZ.html

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuvToCieLuvConverter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieLuv Convert(in CieLchuv input) public CieLuv Convert(in CieLchuv input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuvToCieLchuvConverter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieLchuv Convert(in CieLuv input) public CieLchuv Convert(in CieLuv input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:
@ -27,7 +27,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
float hDegrees = MathFExtensions.RadianToDegree(hRadians); float hDegrees = MathFExtensions.RadianToDegree(hRadians);
// Wrap the angle round at 360. // Wrap the angle round at 360.
hDegrees = hDegrees % 360; hDegrees %= 360;
// Make sure it's not negative. // Make sure it's not negative.
while (hDegrees < 0) while (hDegrees < 0)

16
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuvToCieXyzConverter.cs

@ -1,7 +1,6 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
@ -16,7 +15,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz Convert(in CieLuv input) public CieXyz Convert(in CieLuv input)
{ {
// Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_Luv_to_XYZ.html // Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_Luv_to_XYZ.html
@ -31,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
float a = ((52 * l / (u + (13 * l * u0))) - 1) / 3; float a = ((52 * l / (u + (13 * l * u0))) - 1) / 3;
float b = -5 * y; float b = -5 * y;
float c = -0.3333333F; const float c = -0.3333333F;
float d = y * ((39 * l / (v + (13 * l * v0))) - 5); float d = y * ((39 * l / (v + (13 * l * v0))) - 5);
float x = (d - b) / (a - c); float x = (d - b) / (a - c);
@ -60,21 +58,17 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The whitepoint</param> /// <param name="input">The whitepoint</param>
/// <returns>The <see cref="float"/></returns> /// <returns>The <see cref="float"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
private static float ComputeU0(in CieXyz input) private static float ComputeU0(in CieXyz input)
{ => (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z));
return (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z));
}
/// <summary> /// <summary>
/// Calculates the red-green chromacity based on the given whitepoint. /// Calculates the red-green chromacity based on the given whitepoint.
/// </summary> /// </summary>
/// <param name="input">The whitepoint</param> /// <param name="input">The whitepoint</param>
/// <returns>The <see cref="float"/></returns> /// <returns>The <see cref="float"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
private static float ComputeV0(in CieXyz input) private static float ComputeV0(in CieXyz input)
{ => (9 * input.Y) / (input.X + (15 * input.Y) + (3 * input.Z));
return (9 * input.Y) / (input.X + (15 * input.Y) + (3 * input.Z));
}
} }
} }

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzAndCieXyyConverter.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieXyy Convert(in CieXyz input) public CieXyy Convert(in CieXyz input)
{ {
float x = input.X / (input.X + input.Y + input.Z); float x = input.X / (input.X + input.Y + input.Z);
@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieXyz Convert(in CieXyy input) public CieXyz Convert(in CieXyy input)
{ {
if (MathF.Abs(input.Y) < Constants.Epsilon) if (MathF.Abs(input.Y) < Constants.Epsilon)

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzAndHunterLabConverterBase.cs

@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="whitePoint">The whitepoint</param> /// <param name="whitePoint">The whitepoint</param>
/// <returns>The <see cref="float"/></returns> /// <returns>The <see cref="float"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public static float ComputeKa(CieXyz whitePoint) public static float ComputeKa(CieXyz whitePoint)
{ {
if (whitePoint.Equals(Illuminants.C)) if (whitePoint.Equals(Illuminants.C))
@ -31,7 +31,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="whitePoint">The whitepoint</param> /// <param name="whitePoint">The whitepoint</param>
/// <returns>The <see cref="float"/></returns> /// <returns>The <see cref="float"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public static float ComputeKb(CieXyz whitePoint) public static float ComputeKb(CieXyz whitePoint)
{ {
if (whitePoint == Illuminants.C) if (whitePoint == Illuminants.C)

6
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzAndLmsConverter.cs

@ -23,7 +23,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="CieXyzAndLmsConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzAndLmsConverter"/> class.
/// </summary> /// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzAndLmsConverter() public CieXyzAndLmsConverter()
: this(DefaultTransformationMatrix) : this(DefaultTransformationMatrix)
{ {
@ -36,7 +35,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// Definition of the cone response domain (see <see cref="LmsAdaptationMatrix"/>), /// Definition of the cone response domain (see <see cref="LmsAdaptationMatrix"/>),
/// if not set <see cref="DefaultTransformationMatrix"/> will be used. /// if not set <see cref="DefaultTransformationMatrix"/> will be used.
/// </param> /// </param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzAndLmsConverter(Matrix4x4 transformationMatrix) public CieXyzAndLmsConverter(Matrix4x4 transformationMatrix)
{ {
this.transformationMatrix = transformationMatrix; this.transformationMatrix = transformationMatrix;
@ -48,7 +46,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Lms Convert(in CieXyz input) public Lms Convert(in CieXyz input)
{ {
var vector = Vector3.Transform(input.ToVector3(), this.transformationMatrix); var vector = Vector3.Transform(input.ToVector3(), this.transformationMatrix);
@ -61,7 +59,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieXyz Convert(in Lms input) public CieXyz Convert(in Lms input)
{ {
var vector = Vector3.Transform(input.ToVector3(), this.inverseTransformationMatrix); var vector = Vector3.Transform(input.ToVector3(), this.inverseTransformationMatrix);

9
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToCieLabConverter.cs

@ -14,7 +14,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="CieXyzToCieLabConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToCieLabConverter"/> class.
/// </summary> /// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzToCieLabConverter() public CieXyzToCieLabConverter()
: this(CieLab.DefaultWhitePoint) : this(CieLab.DefaultWhitePoint)
{ {
@ -24,11 +23,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// Initializes a new instance of the <see cref="CieXyzToCieLabConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToCieLabConverter"/> class.
/// </summary> /// </summary>
/// <param name="labWhitePoint">The target reference lab white point</param> /// <param name="labWhitePoint">The target reference lab white point</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)] public CieXyzToCieLabConverter(CieXyz labWhitePoint) => this.LabWhitePoint = labWhitePoint;
public CieXyzToCieLabConverter(CieXyz labWhitePoint)
{
this.LabWhitePoint = labWhitePoint;
}
/// <summary> /// <summary>
/// Gets the target reference whitepoint. When not set, <see cref="CieLab.DefaultWhitePoint"/> is used. /// Gets the target reference whitepoint. When not set, <see cref="CieLab.DefaultWhitePoint"/> is used.
@ -40,7 +35,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieLab Convert(in CieXyz input) public CieLab Convert(in CieXyz input)
{ {
// Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_Lab.html // Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_Lab.html

18
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToCieLuvConverter.cs

@ -14,7 +14,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="CieXyzToCieLuvConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToCieLuvConverter"/> class.
/// </summary> /// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzToCieLuvConverter() public CieXyzToCieLuvConverter()
: this(CieLuv.DefaultWhitePoint) : this(CieLuv.DefaultWhitePoint)
{ {
@ -24,11 +23,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// Initializes a new instance of the <see cref="CieXyzToCieLuvConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToCieLuvConverter"/> class.
/// </summary> /// </summary>
/// <param name="luvWhitePoint">The target reference luv white point</param> /// <param name="luvWhitePoint">The target reference luv white point</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)] public CieXyzToCieLuvConverter(CieXyz luvWhitePoint) => this.LuvWhitePoint = luvWhitePoint;
public CieXyzToCieLuvConverter(CieXyz luvWhitePoint)
{
this.LuvWhitePoint = luvWhitePoint;
}
/// <summary> /// <summary>
/// Gets the target reference whitepoint. When not set, <see cref="CieLuv.DefaultWhitePoint"/> is used. /// Gets the target reference whitepoint. When not set, <see cref="CieLuv.DefaultWhitePoint"/> is used.
@ -40,7 +35,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLuv Convert(in CieXyz input) public CieLuv Convert(in CieXyz input)
{ {
// Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_Luv.html // Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_Luv.html
@ -80,19 +74,15 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <returns>The <see cref="float"/></returns> /// <returns>The <see cref="float"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
private static float ComputeUp(in CieXyz input) private static float ComputeUp(in CieXyz input)
{ => (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z));
return (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z));
}
/// <summary> /// <summary>
/// Calculates the red-green chromacity based on the given whitepoint. /// Calculates the red-green chromacity based on the given whitepoint.
/// </summary> /// </summary>
/// <param name="input">The whitepoint</param> /// <param name="input">The whitepoint</param>
/// <returns>The <see cref="float"/></returns> /// <returns>The <see cref="float"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
private static float ComputeVp(in CieXyz input) private static float ComputeVp(in CieXyz input)
{ => (9 * input.Y) / (input.X + (15 * input.Y) + (3 * input.Z));
return (9 * input.Y) / (input.X + (15 * input.Y) + (3 * input.Z));
}
} }
} }

9
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToHunterLabConverter.cs

@ -14,7 +14,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="CieXyzToHunterLabConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToHunterLabConverter"/> class.
/// </summary> /// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzToHunterLabConverter() public CieXyzToHunterLabConverter()
: this(HunterLab.DefaultWhitePoint) : this(HunterLab.DefaultWhitePoint)
{ {
@ -24,11 +23,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// Initializes a new instance of the <see cref="CieXyzToHunterLabConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToHunterLabConverter"/> class.
/// </summary> /// </summary>
/// <param name="labWhitePoint">The hunter Lab white point.</param> /// <param name="labWhitePoint">The hunter Lab white point.</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)] public CieXyzToHunterLabConverter(CieXyz labWhitePoint) => this.HunterLabWhitePoint = labWhitePoint;
public CieXyzToHunterLabConverter(CieXyz labWhitePoint)
{
this.HunterLabWhitePoint = labWhitePoint;
}
/// <summary> /// <summary>
/// Gets the target reference white. When not set, <see cref="HunterLab.DefaultWhitePoint"/> is used. /// Gets the target reference white. When not set, <see cref="HunterLab.DefaultWhitePoint"/> is used.
@ -40,7 +35,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public HunterLab Convert(in CieXyz input) public HunterLab Convert(in CieXyz input)
{ {
// Conversion algorithm described here: http://en.wikipedia.org/wiki/Lab_color_space#Hunter_Lab // Conversion algorithm described here: http://en.wikipedia.org/wiki/Lab_color_space#Hunter_Lab

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyzToLinearRgbConverter.cs

@ -16,7 +16,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="CieXyzToLinearRgbConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToLinearRgbConverter"/> class.
/// </summary> /// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzToLinearRgbConverter() public CieXyzToLinearRgbConverter()
: this(Rgb.DefaultWorkingSpace) : this(Rgb.DefaultWorkingSpace)
{ {
@ -26,7 +25,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// Initializes a new instance of the <see cref="CieXyzToLinearRgbConverter"/> class. /// Initializes a new instance of the <see cref="CieXyzToLinearRgbConverter"/> class.
/// </summary> /// </summary>
/// <param name="workingSpace">The target working space.</param> /// <param name="workingSpace">The target working space.</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyzToLinearRgbConverter(RgbWorkingSpace workingSpace) public CieXyzToLinearRgbConverter(RgbWorkingSpace workingSpace)
{ {
this.TargetWorkingSpace = workingSpace; this.TargetWorkingSpace = workingSpace;
@ -43,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public LinearRgb Convert(in CieXyz input) public LinearRgb Convert(in CieXyz input)
{ {
Matrix4x4.Invert(this.conversionMatrix, out Matrix4x4 inverted); Matrix4x4.Invert(this.conversionMatrix, out Matrix4x4 inverted);

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/CmykAndRgbConverter.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Rgb Convert(in Cmyk input) public Rgb Convert(in Cmyk input)
{ {
Vector3 rgb = (Vector3.One - new Vector3(input.C, input.M, input.Y)) * (Vector3.One - new Vector3(input.K)); Vector3 rgb = (Vector3.One - new Vector3(input.C, input.M, input.Y)) * (Vector3.One - new Vector3(input.K));
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Cmyk Convert(in Rgb input) public Cmyk Convert(in Rgb input)
{ {
// To CMY // To CMY

26
src/ImageSharp/ColorSpaces/Conversion/Implementation/GammaCompanding.cs

@ -19,33 +19,19 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// Initializes a new instance of the <see cref="GammaCompanding"/> class. /// Initializes a new instance of the <see cref="GammaCompanding"/> class.
/// </summary> /// </summary>
/// <param name="gamma">The gamma value.</param> /// <param name="gamma">The gamma value.</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)] public GammaCompanding(float gamma) => this.Gamma = gamma;
public GammaCompanding(float gamma)
{
this.Gamma = gamma;
}
/// <summary> /// <summary>
/// Gets the gamma value /// Gets the gamma value
/// </summary> /// </summary>
public float Gamma public float Gamma { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Expand(float channel) public float Expand(float channel) => MathF.Pow(channel, this.Gamma);
{
return MathF.Pow(channel, this.Gamma);
}
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Compress(float channel) public float Compress(float channel) => MathF.Pow(channel, 1 / this.Gamma);
{
return MathF.Pow(channel, 1 / this.Gamma);
}
} }
} }

12
src/ImageSharp/ColorSpaces/Conversion/Implementation/HslAndRgbConverter.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Rgb Convert(in Hsl input) public Rgb Convert(in Hsl input)
{ {
float rangedH = input.H / 360F; float rangedH = input.H / 360F;
@ -52,7 +52,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Hsl Convert(in Rgb input) public Hsl Convert(in Rgb input)
{ {
float r = input.R; float r = input.R;
@ -111,7 +111,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <returns> /// <returns>
/// The <see cref="float"/>. /// The <see cref="float"/>.
/// </returns> /// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
private static float GetColorComponent(float first, float second, float third) private static float GetColorComponent(float first, float second, float third)
{ {
third = MoveIntoRange(third); third = MoveIntoRange(third);
@ -142,16 +142,16 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// <returns> /// <returns>
/// The <see cref="float"/>. /// The <see cref="float"/>.
/// </returns> /// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
private static float MoveIntoRange(float value) private static float MoveIntoRange(float value)
{ {
if (value < 0F) if (value < 0F)
{ {
value += 1F; value++;
} }
else if (value > 1F) else if (value > 1F)
{ {
value -= 1F; value--;
} }
return value; return value;

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/HsvAndRgbConverter.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Rgb Convert(in Hsv input) public Rgb Convert(in Hsv input)
{ {
float s = input.S; float s = input.S;
@ -84,7 +84,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Hsv Convert(in Rgb input) public Hsv Convert(in Rgb input)
{ {
float r = input.R; float r = input.R;

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLabToCieXyzConverter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public CieXyz Convert(in HunterLab input) public CieXyz Convert(in HunterLab input)
{ {
// Conversion algorithm described here: http://en.wikipedia.org/wiki/Lab_color_space#Hunter_Lab // Conversion algorithm described here: http://en.wikipedia.org/wiki/Lab_color_space#Hunter_Lab

8
src/ImageSharp/ColorSpaces/Conversion/Implementation/LCompanding.cs

@ -17,14 +17,12 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
public sealed class LCompanding : ICompanding public sealed class LCompanding : ICompanding
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Expand(float channel) public float Expand(float channel)
{ => channel <= 0.08 ? 100 * channel / CieConstants.Kappa : ImageMaths.Pow3((channel + 0.16F) / 1.16F);
return channel <= 0.08 ? 100 * channel / CieConstants.Kappa : ImageMaths.Pow3((channel + 0.16F) / 1.16F);
}
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Compress(float channel) public float Compress(float channel)
{ {
return channel <= CieConstants.Epsilon return channel <= CieConstants.Epsilon

1
src/ImageSharp/ColorSpaces/Conversion/Implementation/LinearRgbAndCieXyzConverterBase.cs

@ -18,7 +18,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
public static Matrix4x4 GetRgbToCieXyzMatrix(RgbWorkingSpace workingSpace) public static Matrix4x4 GetRgbToCieXyzMatrix(RgbWorkingSpace workingSpace)
{ {
DebugGuard.NotNull(workingSpace, nameof(workingSpace)); DebugGuard.NotNull(workingSpace, nameof(workingSpace));
RgbPrimariesChromaticityCoordinates chromaticity = workingSpace.ChromaticityCoordinates; RgbPrimariesChromaticityCoordinates chromaticity = workingSpace.ChromaticityCoordinates;
float xr = chromaticity.R.X; float xr = chromaticity.R.X;

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/LinearRgbToCieXyzConverter.cs

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System.Numerics; using System.Numerics;
using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
{ {
@ -40,6 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(InliningOptions.ShortMethod)]
public CieXyz Convert(in LinearRgb input) public CieXyz Convert(in LinearRgb input)
{ {
DebugGuard.IsTrue(input.WorkingSpace.Equals(this.SourceWorkingSpace), nameof(input.WorkingSpace), "Input and source working spaces must be equal."); DebugGuard.IsTrue(input.WorkingSpace.Equals(this.SourceWorkingSpace), nameof(input.WorkingSpace), "Input and source working spaces must be equal.");

3
src/ImageSharp/ColorSpaces/Conversion/Implementation/LinearRgbToRgbConverter.cs

@ -1,7 +1,7 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System.Numerics; using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
{ {
@ -15,6 +15,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(InliningOptions.ShortMethod)]
public Rgb Convert(in LinearRgb input) public Rgb Convert(in LinearRgb input)
{ {
var vector = input.ToVector3(); var vector = input.ToVector3();

1
src/ImageSharp/ColorSpaces/Conversion/Implementation/LmsAdaptationMatrix.cs

@ -3,7 +3,6 @@
using System.Numerics; using System.Numerics;
// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
{ {
/// <summary> /// <summary>

3
src/ImageSharp/ColorSpaces/Conversion/Implementation/RGBPrimariesChromaticityCoordinates.cs

@ -92,8 +92,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
{ {
int hashCode = this.R.GetHashCode(); int hashCode = this.R.GetHashCode();
hashCode = (hashCode * 397) ^ this.G.GetHashCode(); hashCode = (hashCode * 397) ^ this.G.GetHashCode();
hashCode = (hashCode * 397) ^ this.B.GetHashCode(); return (hashCode * 397) ^ this.B.GetHashCode();
return hashCode;
} }
} }
} }

12
src/ImageSharp/ColorSpaces/Conversion/Implementation/Rec2020Companding.cs

@ -16,17 +16,13 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
public sealed class Rec2020Companding : ICompanding public sealed class Rec2020Companding : ICompanding
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Expand(float channel) public float Expand(float channel)
{ => channel < 0.08145F ? channel / 4.5F : MathF.Pow((channel + 0.0993F) / 1.0993F, 2.222222F);
return channel < 0.08145F ? channel / 4.5F : MathF.Pow((channel + 0.0993F) / 1.0993F, 2.222222F);
}
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Compress(float channel) public float Compress(float channel)
{ => channel < 0.0181F ? 4500F * channel : (1.0993F * channel) - 0.0993F;
return channel < 0.0181F ? 4500F * channel : (1.0993F * channel) - 0.0993F;
}
} }
} }

12
src/ImageSharp/ColorSpaces/Conversion/Implementation/Rec709Companding.cs

@ -15,17 +15,13 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
public sealed class Rec709Companding : ICompanding public sealed class Rec709Companding : ICompanding
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Expand(float channel) public float Expand(float channel)
{ => channel < 0.081F ? channel / 4.5F : MathF.Pow((channel + 0.099F) / 1.099F, 2.222222F);
return channel < 0.081F ? channel / 4.5F : MathF.Pow((channel + 0.099F) / 1.099F, 2.222222F);
}
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public float Compress(float channel) public float Compress(float channel)
{ => channel < 0.018F ? 4500F * channel : (1.099F * channel) - 0.099F;
return channel < 0.018F ? 4500F * channel : (1.099F * channel) - 0.099F;
}
} }
} }

3
src/ImageSharp/ColorSpaces/Conversion/Implementation/RgbToLinearRgbConverter.cs

@ -1,7 +1,7 @@
// Copyright (c) Six Labors and contributors. // Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System.Numerics; using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
{ {
@ -15,6 +15,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(InliningOptions.ShortMethod)]
public LinearRgb Convert(in Rgb input) public LinearRgb Convert(in Rgb input)
{ {
var vector = input.ToVector3(); var vector = input.ToVector3();

3
src/ImageSharp/ColorSpaces/Conversion/Implementation/RgbWorkingSpace.cs

@ -84,8 +84,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
{ {
int hash = this.WhitePoint.GetHashCode(); int hash = this.WhitePoint.GetHashCode();
hash = HashHelpers.Combine(hash, this.ChromaticityCoordinates.GetHashCode()); hash = HashHelpers.Combine(hash, this.ChromaticityCoordinates.GetHashCode());
hash = HashHelpers.Combine(hash, this.Companding?.GetHashCode() ?? 0); return HashHelpers.Combine(hash, this.Companding?.GetHashCode() ?? 0);
return hash;
} }
} }
} }

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/YCbCrAndRgbConverter.cs

@ -20,7 +20,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public Rgb Convert(in YCbCr input) public Rgb Convert(in YCbCr input)
{ {
float y = input.Y; float y = input.Y;
@ -39,7 +39,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation
/// </summary> /// </summary>
/// <param name="input">The input color instance.</param> /// <param name="input">The input color instance.</param>
/// <returns>The converted result</returns> /// <returns>The converted result</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(InliningOptions.ShortMethod)]
public YCbCr Convert(in Rgb input) public YCbCr Convert(in Rgb input)
{ {
Vector3 rgb = input.ToVector3() * MaxBytes; Vector3 rgb = input.ToVector3() * MaxBytes;

4
src/ImageSharp/Common/Helpers/InliningOptions.cs

@ -8,12 +8,12 @@ using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp namespace SixLabors.ImageSharp
{ {
/// <summary> /// <summary>
/// Global inlining options. Helps temporarily disable inling for better profiler output. /// Global inlining options. Helps temporarily disable inlining for better profiler output.
/// </summary> /// </summary>
internal static class InliningOptions internal static class InliningOptions
{ {
#if PROFILING #if PROFILING
public const MethodImplOptions ShortMethod = 0; public const MethodImplOptions ShortMethod = MethodImplOptions.NoInlining;
#else #else
public const MethodImplOptions ShortMethod = MethodImplOptions.AggressiveInlining; public const MethodImplOptions ShortMethod = MethodImplOptions.AggressiveInlining;
#endif #endif

1
tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs

@ -158,7 +158,6 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Conversion
} }
[Theory] [Theory]
[InlineData(0, 0, 0, 0, 0, 0)]
[InlineData(22, 33, 1, 22, 33, 0.9999999)] [InlineData(22, 33, 1, 22, 33, 0.9999999)]
public void Adapt_CieLch_D65_To_D50_XyzScaling(float l1, float c1, float h1, float l2, float c2, float h2) public void Adapt_CieLch_D65_To_D50_XyzScaling(float l1, float c1, float h1, float l2, float c2, float h2)
{ {

Loading…
Cancel
Save