Browse Source

Update IColorConversion to support readonly structs

af/merge-core
Jason Nelson 8 years ago
parent
commit
f871c9f1eb
  1. 4
      src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs
  2. 6
      src/ImageSharp/ColorSpaces/Conversion/IColorConversion.cs
  3. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLab/CieLabToCieXyzConverter.cs
  4. 8
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs
  5. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLch/CIeLchToCieLabConverter.cs
  6. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLch/CieLabToCieLchConverter.cs
  7. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuv/CieLchuvToCieLuvConverter.cs
  8. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuv/CieLuvToCieLchuvConverter.cs
  9. 6
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuv/CieLuvToCieXyzConverter.cs
  10. 12
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuv/CieXyzToCieLuvConverter.cs
  11. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyy/CieXyzAndCieXyyConverter.cs
  12. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Cmyk/CmykAndRgbConverter.cs
  13. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Hsl/HslAndRgbConverter.cs
  14. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Hsv/HsvAndRgbConverter.cs
  15. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLab/CieXyzToHunterLabConverter.cs
  16. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLab/HunterLabToCieXyzConverter.cs
  17. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs
  18. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs
  19. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/LinearRgbToCieXyzConverter.cs
  20. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/LinearRgbToRgbConverter.cs
  21. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbToLinearRgbConverter.cs
  22. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/YCbCr/YCbCrAndRgbConverter.cs
  23. 2
      src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs

4
src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs

@ -1,8 +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 SixLabors.ImageSharp.ColorSpaces;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion namespace SixLabors.ImageSharp.ColorSpaces.Conversion
{ {
/// <summary> /// <summary>
@ -20,6 +18,6 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// <param name="sourceWhitePoint">The source white point.</param> /// <param name="sourceWhitePoint">The source white point.</param>
/// <param name="targetWhitePoint">The target white point.</param> /// <param name="targetWhitePoint">The target white point.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
CieXyz Transform(CieXyz sourceColor, CieXyz sourceWhitePoint, CieXyz targetWhitePoint); CieXyz Transform(in CieXyz sourceColor, in CieXyz sourceWhitePoint, in CieXyz targetWhitePoint);
} }
} }

6
src/ImageSharp/ColorSpaces/Conversion/IColorConversion.cs

@ -8,13 +8,15 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <typeparam name="T">The input color type.</typeparam> /// <typeparam name="T">The input color type.</typeparam>
/// <typeparam name="TResult">The result color type.</typeparam> /// <typeparam name="TResult">The result color type.</typeparam>
internal interface IColorConversion<in T, out TResult> internal interface IColorConversion<T, TResult>
where T : struct
where TResult : struct
{ {
/// <summary> /// <summary>
/// Performs the conversion from the input to an instance of the output type. /// Performs the conversion from the input to an instance of the output type.
/// </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>
TResult Convert(T input); TResult Convert(in T input);
} }
} }

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

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLabColor
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz Convert(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
float l = input.L, a = input.A, b = input.B; float l = input.L, a = input.A, b = input.B;

8
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs

@ -33,15 +33,11 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLabColor
/// <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.
/// </summary> /// </summary>
public CieXyz LabWhitePoint public CieXyz LabWhitePoint { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <inheritdoc /> /// <inheritdoc />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLab Convert(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
float wx = this.LabWhitePoint.X, wy = this.LabWhitePoint.Y, wz = this.LabWhitePoint.Z; float wx = this.LabWhitePoint.X, wy = this.LabWhitePoint.Y, wz = this.LabWhitePoint.Z;

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

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLchColor
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLab Convert(CieLch input) public CieLab Convert(in CieLch input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:
// https://en.wikipedia.org/wiki/Lab_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC // https://en.wikipedia.org/wiki/Lab_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLch/CieLabToCieLchConverter.cs

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLchColor
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLch Convert(CieLab input) public CieLch Convert(in CieLab input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:
// https://en.wikipedia.org/wiki/Lab_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC // https://en.wikipedia.org/wiki/Lab_color_space#Cylindrical_representation:_CIELCh_or_CIEHLC

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

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLchuvCol
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLuv Convert(CieLchuv input) public CieLuv Convert(in CieLchuv input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:
// https://en.wikipedia.org/wiki/CIELUV#Cylindrical_representation_.28CIELCH.29 // https://en.wikipedia.org/wiki/CIELUV#Cylindrical_representation_.28CIELCH.29

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuv/CieLuvToCieLchuvConverter.cs

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLchuvCol
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLchuv Convert(CieLuv input) public CieLchuv Convert(in CieLuv input)
{ {
// Conversion algorithm described here: // Conversion algorithm described here:
// https://en.wikipedia.org/wiki/CIELUV#Cylindrical_representation_.28CIELCH.29 // https://en.wikipedia.org/wiki/CIELUV#Cylindrical_representation_.28CIELCH.29

6
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuv/CieLuvToCieXyzConverter.cs

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLuvColor
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz Convert(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
float l = input.L, u = input.U, v = input.V; float l = input.L, u = input.U, v = input.V;
@ -57,7 +57,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLuvColor
/// <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(MethodImplOptions.AggressiveInlining)]
private static float ComputeU0(CieXyz input) private static float ComputeU0(in CieXyz input)
{ {
return (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z)); return (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z));
} }
@ -68,7 +68,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLuvColor
/// <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(MethodImplOptions.AggressiveInlining)]
private static float ComputeV0(CieXyz input) private static float ComputeV0(in CieXyz input)
{ {
return (9 * input.Y) / (input.X + (15 * input.Y) + (3 * input.Z)); return (9 * input.Y) / (input.X + (15 * input.Y) + (3 * input.Z));
} }

12
src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuv/CieXyzToCieLuvConverter.cs

@ -34,15 +34,11 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLuvColor
/// <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.
/// </summary> /// </summary>
public CieXyz LuvWhitePoint public CieXyz LuvWhitePoint { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <inheritdoc /> /// <inheritdoc />
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieLuv Convert(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
float yr = input.Y / this.LuvWhitePoint.Y; float yr = input.Y / this.LuvWhitePoint.Y;
@ -80,7 +76,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLuvColor
/// <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(MethodImplOptions.AggressiveInlining)]
private static float ComputeUp(CieXyz input) private static float ComputeUp(in CieXyz input)
{ {
return (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z)); return (4 * input.X) / (input.X + (15 * input.Y) + (3 * input.Z));
} }
@ -90,7 +86,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieLuvColor
/// </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>
private static float ComputeVp(CieXyz input) private static float ComputeVp(in CieXyz input)
{ {
return (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/CieXyy/CieXyzAndCieXyyConverter.cs

@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieXyyColor
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyy Convert(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);
float y = input.Y / (input.X + input.Y + input.Z); float y = input.Y / (input.X + input.Y + input.Z);
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CieXyyColor
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz Convert(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/Cmyk/CmykAndRgbConverter.cs

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CmykColorSa
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Rgb Convert(Cmyk input) public Rgb Convert(in Cmyk input)
{ {
float r = (1F - input.C) * (1F - input.K); float r = (1F - input.C) * (1F - input.K);
float g = (1F - input.M) * (1F - input.K); float g = (1F - input.M) * (1F - input.K);
@ -24,7 +24,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.CmykColorSa
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Cmyk Convert(Rgb input) public Cmyk Convert(in Rgb input)
{ {
// To CMYK // To CMYK
float c = 1F - input.R; float c = 1F - input.R;

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/Hsl/HslAndRgbConverter.cs

@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.HslColorSap
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Rgb Convert(Hsl input) public Rgb Convert(in Hsl input)
{ {
float rangedH = input.H / 360F; float rangedH = input.H / 360F;
float r = 0; float r = 0;
@ -45,7 +45,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.HslColorSap
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Hsl Convert(Rgb input) public Hsl Convert(in Rgb input)
{ {
float r = input.R; float r = input.R;
float g = input.G; float g = input.G;

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

@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.HsvColorSap
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Rgb Convert(Hsv input) public Rgb Convert(in Hsv input)
{ {
float s = input.S; float s = input.S;
float v = input.V; float v = input.V;
@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.HsvColorSap
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Hsv Convert(Rgb input) public Hsv Convert(in Rgb input)
{ {
float r = input.R; float r = input.R;
float g = input.G; float g = input.G;

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLab/CieXyzToHunterLabConverter.cs

@ -37,7 +37,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.HunterLabCo
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public HunterLab Convert(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
float x = input.X, y = input.Y, z = input.Z; float x = input.X, y = input.Y, z = input.Z;

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

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.HunterLabCo
{ {
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz Convert(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
float l = input.L, a = input.A, b = input.B; float l = input.L, a = input.A, b = input.B;

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs

@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.LmsColorSap
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Lms Convert(CieXyz input) public Lms Convert(in CieXyz input)
{ {
Vector3 vector = Vector3.Transform(input.Vector, this.transformationMatrix); Vector3 vector = Vector3.Transform(input.Vector, this.transformationMatrix);
return new Lms(vector); return new Lms(vector);
@ -68,7 +68,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.LmsColorSap
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz Convert(Lms input) public CieXyz Convert(in Lms input)
{ {
Vector3 vector = Vector3.Transform(input.Vector, this.inverseTransformationMatrix); Vector3 vector = Vector3.Transform(input.Vector, this.inverseTransformationMatrix);
return new CieXyz(vector); return new CieXyz(vector);

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs

@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSap
public IRgbWorkingSpace TargetWorkingSpace { get; } public IRgbWorkingSpace TargetWorkingSpace { get; }
/// <inheritdoc/> /// <inheritdoc/>
public LinearRgb Convert(CieXyz input) public LinearRgb Convert(in CieXyz input)
{ {
Matrix4x4.Invert(this.conversionMatrix, out Matrix4x4 inverted); Matrix4x4.Invert(this.conversionMatrix, out Matrix4x4 inverted);
Vector3 vector = Vector3.Transform(input.Vector, inverted); Vector3 vector = Vector3.Transform(input.Vector, inverted);

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

@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSap
public IRgbWorkingSpace SourceWorkingSpace { get; } public IRgbWorkingSpace SourceWorkingSpace { get; }
/// <inheritdoc/> /// <inheritdoc/>
public CieXyz Convert(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.");

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/LinearRgbToRgbConverter.cs

@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSap
internal class LinearRgbToRgbConverter : IColorConversion<LinearRgb, Rgb> internal class LinearRgbToRgbConverter : IColorConversion<LinearRgb, Rgb>
{ {
/// <inheritdoc/> /// <inheritdoc/>
public Rgb Convert(LinearRgb input) public Rgb Convert(in LinearRgb input)
{ {
Vector3 vector = input.Vector; Vector3 vector = input.Vector;
vector.X = input.WorkingSpace.Companding.Compress(vector.X); vector.X = input.WorkingSpace.Companding.Compress(vector.X);

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbToLinearRgbConverter.cs

@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSap
internal class RgbToLinearRgbConverter : IColorConversion<Rgb, LinearRgb> internal class RgbToLinearRgbConverter : IColorConversion<Rgb, LinearRgb>
{ {
/// <inheritdoc/> /// <inheritdoc/>
public LinearRgb Convert(Rgb input) public LinearRgb Convert(in Rgb input)
{ {
Vector3 vector = input.Vector; Vector3 vector = input.Vector;
vector.X = input.WorkingSpace.Companding.Expand(vector.X); vector.X = input.WorkingSpace.Companding.Expand(vector.X);

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

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.YCbCrColorS
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Rgb Convert(YCbCr input) public Rgb Convert(in YCbCr input)
{ {
float y = input.Y; float y = input.Y;
float cb = input.Cb - 128F; float cb = input.Cb - 128F;
@ -32,7 +32,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.YCbCrColorS
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public YCbCr Convert(Rgb input) public YCbCr Convert(in Rgb input)
{ {
Vector3 rgb = input.Vector * MaxBytes; Vector3 rgb = input.Vector * MaxBytes;
float r = rgb.X; float r = rgb.X;

2
src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs

@ -47,7 +47,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
} }
/// <inheritdoc/> /// <inheritdoc/>
public CieXyz Transform(CieXyz sourceColor, CieXyz sourceWhitePoint, CieXyz targetWhitePoint) public CieXyz Transform(in CieXyz sourceColor, in CieXyz sourceWhitePoint, in CieXyz targetWhitePoint)
{ {
if (sourceWhitePoint.Equals(targetWhitePoint)) if (sourceWhitePoint.Equals(targetWhitePoint))
{ {

Loading…
Cancel
Save