Browse Source

Merge branch 'master' into feature/pngExif

af/merge-core
Brian Popow 8 years ago
committed by GitHub
parent
commit
68bc4db924
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 34
      src/ImageSharp/ColorSpaces/CieLab.cs
  2. 33
      src/ImageSharp/ColorSpaces/CieLch.cs
  3. 37
      src/ImageSharp/ColorSpaces/CieLchuv.cs
  4. 34
      src/ImageSharp/ColorSpaces/CieLuv.cs
  5. 22
      src/ImageSharp/ColorSpaces/CieXyChromaticityCoordinates.cs
  6. 28
      src/ImageSharp/ColorSpaces/CieXyy.cs
  7. 23
      src/ImageSharp/ColorSpaces/CieXyz.cs
  8. 22
      src/ImageSharp/ColorSpaces/Cmyk.cs
  9. 16
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs
  10. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs
  11. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs
  12. 24
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs
  13. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs
  14. 24
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs
  15. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs
  16. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs
  17. 24
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs
  18. 24
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs
  19. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs
  20. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs
  21. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs
  22. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs
  23. 26
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs
  24. 4
      src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs
  25. 6
      src/ImageSharp/ColorSpaces/Conversion/IColorConversion.cs
  26. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLab/CieLabToCieXyzConverter.cs
  27. 8
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs
  28. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLch/CIeLchToCieLabConverter.cs
  29. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLch/CieLabToCieLchConverter.cs
  30. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuv/CieLchuvToCieLuvConverter.cs
  31. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLchuv/CieLuvToCieLchuvConverter.cs
  32. 6
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuv/CieLuvToCieXyzConverter.cs
  33. 12
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieLuv/CieXyzToCieLuvConverter.cs
  34. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/CieXyy/CieXyzAndCieXyyConverter.cs
  35. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Cmyk/CmykAndRgbConverter.cs
  36. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Hsl/HslAndRgbConverter.cs
  37. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Hsv/HsvAndRgbConverter.cs
  38. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLab/CieXyzToHunterLabConverter.cs
  39. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/HunterLab/HunterLabToCieXyzConverter.cs
  40. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs
  41. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/CieXyzToLinearRgbConverter.cs
  42. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/LinearRgbToCieXyzConverter.cs
  43. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/LinearRgbToRgbConverter.cs
  44. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbToLinearRgbConverter.cs
  45. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Rgb/RgbWorkingSpace.cs
  46. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/YCbCr/YCbCrAndRgbConverter.cs
  47. 2
      src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs
  48. 30
      src/ImageSharp/ColorSpaces/Hsl.cs
  49. 24
      src/ImageSharp/ColorSpaces/Hsv.cs
  50. 36
      src/ImageSharp/ColorSpaces/HunterLab.cs
  51. 4
      src/ImageSharp/ColorSpaces/IRgbWorkingSpace.cs
  52. 30
      src/ImageSharp/ColorSpaces/LinearRgb.cs
  53. 27
      src/ImageSharp/ColorSpaces/Lms.cs
  54. 33
      src/ImageSharp/ColorSpaces/Rgb.cs
  55. 72
      src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs
  56. 31
      src/ImageSharp/ColorSpaces/YCbCr.cs
  57. 2
      src/ImageSharp/MetaData/Profiles/ICC/Curves/IccOneDimensionalCurve.cs
  58. 2
      src/ImageSharp/MetaData/Profiles/ICC/Curves/IccResponseCurve.cs
  59. 3
      src/ImageSharp/MetaData/Profiles/ICC/Curves/IccSampledCurveElement.cs
  60. 3
      src/ImageSharp/MetaData/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs
  61. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs
  62. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs
  63. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs
  64. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs
  65. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs
  66. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs
  67. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs
  68. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs
  69. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs
  70. 2
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs
  71. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs
  72. 5
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs
  73. 3
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs
  74. 7
      src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs
  75. 4
      src/ImageSharp/MetaData/Profiles/ICC/Various/IccClut.cs
  76. 3
      src/ImageSharp/MetaData/Profiles/ICC/Various/IccLut.cs
  77. 15
      src/ImageSharp/MetaData/Profiles/ICC/Various/IccProfileId.cs
  78. 2
      src/ImageSharp/MetaData/Profiles/ICC/Various/IccScreeningChannel.cs
  79. 24
      tests/ImageSharp.Tests/Colorspaces/ColorSpaceEqualityTests.cs
  80. 32
      tests/ImageSharp.Tests/MetaData/Profiles/ICC/Various/IccProfileIdTests.cs

34
src/ImageSharp/ColorSpaces/CieLab.cs

@ -20,11 +20,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
public static readonly CieXyz DefaultWhitePoint = Illuminants.D50; public static readonly CieXyz DefaultWhitePoint = Illuminants.D50;
/// <summary>
/// Represents a <see cref="CieLab"/> that has L, A, B values set to zero.
/// </summary>
public static readonly CieLab Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -83,11 +78,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <summary> /// <summary>
/// Gets the reference white point of this color /// Gets the reference white point of this color
/// </summary> /// </summary>
public CieXyz WhitePoint public CieXyz WhitePoint { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <summary> /// <summary>
/// Gets the lightness dimension. /// Gets the lightness dimension.
@ -119,12 +110,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieLab"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector
{ {
@ -171,27 +156,18 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return HashHelpers.Combine(this.WhitePoint.GetHashCode(), this.backingVector.GetHashCode());
{
int hashCode = this.WhitePoint.GetHashCode();
hashCode = (hashCode * 397) ^ this.backingVector.GetHashCode();
return hashCode;
}
} }
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieLab [Empty]"
return "CieLab [Empty]"; : $"CieLab [ L={this.L:#0.##}, A={this.A:#0.##}, B={this.B:#0.##}]";
}
return $"CieLab [ L={this.L:#0.##}, A={this.A:#0.##}, B={this.B:#0.##}]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is CieLab other && this.Equals(other); return obj is CieLab other && this.Equals(other);

33
src/ImageSharp/ColorSpaces/CieLch.cs

@ -20,11 +20,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
public static readonly CieXyz DefaultWhitePoint = Illuminants.D50; public static readonly CieXyz DefaultWhitePoint = Illuminants.D50;
/// <summary>
/// Represents a <see cref="CieLch"/> that has L, C, H values set to zero.
/// </summary>
public static readonly CieLch Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -83,11 +78,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <summary> /// <summary>
/// Gets the reference white point of this color /// Gets the reference white point of this color
/// </summary> /// </summary>
public CieXyz WhitePoint public CieXyz WhitePoint { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <summary> /// <summary>
/// Gets the lightness dimension. /// Gets the lightness dimension.
@ -119,12 +110,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieLch"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector
{ {
@ -171,23 +156,15 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return HashHelpers.Combine(this.WhitePoint.GetHashCode(), this.backingVector.GetHashCode());
{
int hashCode = this.WhitePoint.GetHashCode();
hashCode = (hashCode * 397) ^ this.backingVector.GetHashCode();
return hashCode;
}
} }
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieLch [Empty]"
return "CieLch [Empty]"; : $"CieLch [ L={this.L:#0.##}, C={this.C:#0.##}, H={this.H:#0.##}]";
}
return $"CieLch [ L={this.L:#0.##}, C={this.C:#0.##}, H={this.H:#0.##}]";
} }
/// <inheritdoc/> /// <inheritdoc/>

37
src/ImageSharp/ColorSpaces/CieLchuv.cs

@ -20,11 +20,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
public static readonly CieXyz DefaultWhitePoint = Illuminants.D65; public static readonly CieXyz DefaultWhitePoint = Illuminants.D65;
/// <summary>
/// Represents a <see cref="CieLchuv"/> that has L, C, H values set to zero.
/// </summary>
public static readonly CieLchuv Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -83,11 +78,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <summary> /// <summary>
/// Gets the reference white point of this color /// Gets the reference white point of this color
/// </summary> /// </summary>
public CieXyz WhitePoint public CieXyz WhitePoint { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <summary> /// <summary>
/// Gets the lightness dimension. /// Gets the lightness dimension.
@ -119,12 +110,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieLchuv"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector
{ {
@ -144,7 +129,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <returns> /// <returns>
/// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false. /// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns> /// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(CieLchuv left, CieLchuv right) public static bool operator ==(CieLchuv left, CieLchuv right)
{ {
return left.Equals(right); return left.Equals(right);
@ -162,36 +146,27 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <returns> /// <returns>
/// True if the current left is unequal to the <paramref name="right"/> parameter; otherwise, false. /// True if the current left is unequal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns> /// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator !=(CieLchuv left, CieLchuv right) public static bool operator !=(CieLchuv left, CieLchuv right)
{ {
return !left.Equals(right); return !left.Equals(right);
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return HashHelpers.Combine(this.WhitePoint.GetHashCode(), this.backingVector.GetHashCode());
{
int hashCode = this.WhitePoint.GetHashCode();
hashCode = (hashCode * 397) ^ this.backingVector.GetHashCode();
return hashCode;
}
} }
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieLchuv [Empty]"
return "CieLchuv [Empty]"; : $"CieLchuv [ L={this.L:#0.##}, C={this.C:#0.##}, H={this.H:#0.##}";
}
return $"CieLchuv [ L={this.L:#0.##}, C={this.C:#0.##}, H={this.H:#0.##}]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is CieLchuv other && this.Equals(other); return obj is CieLchuv other && this.Equals(other);

34
src/ImageSharp/ColorSpaces/CieLuv.cs

@ -22,11 +22,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
public static readonly CieXyz DefaultWhitePoint = Illuminants.D65; public static readonly CieXyz DefaultWhitePoint = Illuminants.D65;
/// <summary>
/// Represents a <see cref="CieLuv"/> that has L, U, and V values set to zero.
/// </summary>
public static readonly CieLuv Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -85,11 +80,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <summary> /// <summary>
/// Gets the reference white point of this color /// Gets the reference white point of this color
/// </summary> /// </summary>
public CieXyz WhitePoint public CieXyz WhitePoint { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <summary> /// <summary>
/// Gets the lightness dimension /// Gets the lightness dimension
@ -121,12 +112,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieLuv"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector
{ {
@ -173,27 +158,18 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return HashHelpers.Combine(this.WhitePoint.GetHashCode(), this.backingVector.GetHashCode());
{
int hashCode = this.WhitePoint.GetHashCode();
hashCode = (hashCode * 397) ^ this.backingVector.GetHashCode();
return hashCode;
}
} }
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieLuv [ Empty ]"
return "CieLuv [ Empty ]"; : $"CieLuv [ L={this.L:#0.##}, U={this.U:#0.##}, V={this.V:#0.##} ]";
}
return $"CieLuv [ L={this.L:#0.##}, U={this.U:#0.##}, V={this.V:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is CieLuv other && this.Equals(other); return obj is CieLuv other && this.Equals(other);

22
src/ImageSharp/ColorSpaces/CieXyChromaticityCoordinates.cs

@ -14,11 +14,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
internal readonly struct CieXyChromaticityCoordinates : IEquatable<CieXyChromaticityCoordinates>, IAlmostEquatable<CieXyChromaticityCoordinates, float> internal readonly struct CieXyChromaticityCoordinates : IEquatable<CieXyChromaticityCoordinates>, IAlmostEquatable<CieXyChromaticityCoordinates, float>
{ {
/// <summary>
/// Represents a <see cref="CieXyChromaticityCoordinates"/> that has X, Y values set to zero.
/// </summary>
public static readonly CieXyChromaticityCoordinates Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -69,12 +64,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Y; get => this.backingVector.Y;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieXyChromaticityCoordinates"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <summary> /// <summary>
/// Compares two <see cref="CieXyChromaticityCoordinates"/> objects for equality. /// Compares two <see cref="CieXyChromaticityCoordinates"/> objects for equality.
/// </summary> /// </summary>
@ -112,6 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc /> /// <inheritdoc />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -120,16 +110,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieXyChromaticityCoordinates [Empty]"
return "CieXyChromaticityCoordinates [Empty]"; : $"CieXyChromaticityCoordinates [ X={this.X:#0.##}, Y={this.Y:#0.##}]";
}
return $"CieXyChromaticityCoordinates [ X={this.X:#0.##}, Y={this.Y:#0.##}]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is CieXyChromaticityCoordinates other && this.Equals(other); return obj is CieXyChromaticityCoordinates other && this.Equals(other);

28
src/ImageSharp/ColorSpaces/CieXyy.cs

@ -14,11 +14,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
internal readonly struct CieXyy : IColorVector, IEquatable<CieXyy>, IAlmostEquatable<CieXyy, float> internal readonly struct CieXyy : IColorVector, IEquatable<CieXyy>, IAlmostEquatable<CieXyy, float>
{ {
/// <summary>
/// Represents a <see cref="CieXyy"/> that has X, Y, and Y values set to zero.
/// </summary>
public static readonly CieXyy Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -78,18 +73,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieXyy"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Compares two <see cref="CieXyy"/> objects for equality. /// Compares two <see cref="CieXyy"/> objects for equality.
@ -128,6 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -136,16 +122,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieXyy [ Empty ]"
return "CieXyy [ Empty ]"; : $"CieXyy [ X={this.X:#0.##}, Y={this.Y:#0.##}, Yl={this.Yl:#0.##} ]";
}
return $"CieXyy [ X={this.X:#0.##}, Y={this.Y:#0.##}, Yl={this.Yl:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is CieXyy other && this.Equals(other); return obj is CieXyy other && this.Equals(other);

23
src/ImageSharp/ColorSpaces/CieXyz.cs

@ -14,11 +14,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
internal readonly struct CieXyz : IColorVector, IEquatable<CieXyz>, IAlmostEquatable<CieXyz, float> internal readonly struct CieXyz : IColorVector, IEquatable<CieXyz>, IAlmostEquatable<CieXyz, float>
{ {
/// <summary>
/// Represents a <see cref="CieXyz"/> that has X, Y, and Z values set to zero.
/// </summary>
public static readonly CieXyz Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -40,7 +35,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Initializes a new instance of the <see cref="CieXyz"/> struct. /// Initializes a new instance of the <see cref="CieXyz"/> struct.
/// </summary> /// </summary>
/// <param name="vector">The vector representing the x, y, z components.</param> /// <param name="vector">The vector representing the x, y, z components.</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public CieXyz(Vector3 vector) public CieXyz(Vector3 vector)
: this() : this()
{ {
@ -78,12 +72,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="CieXyz"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector
{ {
@ -128,6 +116,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -136,16 +125,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "CieXyz [ Empty ]"
return "CieXyz [ Empty ]"; : $"CieXyz [ X={this.X:#0.##}, Y={this.Y:#0.##}, Z={this.Z:#0.##} ]";
}
return $"CieXyz [ X={this.X:#0.##}, Y={this.Y:#0.##}, Z={this.Z:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is CieXyz other && this.Equals(other); return obj is CieXyz other && this.Equals(other);

22
src/ImageSharp/ColorSpaces/Cmyk.cs

@ -13,11 +13,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
internal readonly struct Cmyk : IEquatable<Cmyk>, IAlmostEquatable<Cmyk, float> internal readonly struct Cmyk : IEquatable<Cmyk>, IAlmostEquatable<Cmyk, float>
{ {
/// <summary>
/// Represents a <see cref="Cmyk"/> that has C, M, Y, and K values set to zero.
/// </summary>
public static readonly Cmyk Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -87,12 +82,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.W; get => this.backingVector.W;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="Cmyk"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <summary> /// <summary>
/// Compares two <see cref="Cmyk"/> objects for equality. /// Compares two <see cref="Cmyk"/> objects for equality.
/// </summary> /// </summary>
@ -130,6 +119,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -138,16 +128,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "Cmyk [Empty]"
return "Cmyk [Empty]"; : $"Cmyk [ C={this.C:#0.##}, M={this.M:#0.##}, Y={this.Y:#0.##}, K={this.K:#0.##}]";
}
return $"Cmyk [ C={this.C:#0.##}, M={this.M:#0.##}, Y={this.Y:#0.##}, K={this.K:#0.##}]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is Cmyk other && this.Equals(other); return obj is Cmyk other && this.Equals(other);

16
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs

@ -18,7 +18,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <param name="sourceWhitePoint">The white point to adapt for</param> /// <param name="sourceWhitePoint">The white point to adapt for</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public CieXyz Adapt(CieXyz color, CieXyz sourceWhitePoint) public CieXyz Adapt(in CieXyz color, in CieXyz sourceWhitePoint)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -33,7 +33,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public CieLab Adapt(CieLab color) public CieLab Adapt(in CieLab color)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -54,7 +54,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public CieLch Adapt(CieLch color) public CieLch Adapt(in CieLch color)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -75,7 +75,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public CieLchuv Adapt(CieLchuv color) public CieLchuv Adapt(in CieLchuv color)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -96,7 +96,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public CieLuv Adapt(CieLuv color) public CieLuv Adapt(in CieLuv color)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -117,7 +117,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public HunterLab Adapt(HunterLab color) public HunterLab Adapt(in HunterLab color)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -138,7 +138,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public LinearRgb Adapt(LinearRgb color) public LinearRgb Adapt(in LinearRgb color)
{ {
if (!this.IsChromaticAdaptationPerformed) if (!this.IsChromaticAdaptationPerformed)
{ {
@ -167,7 +167,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to adapt</param> /// <param name="color">The color to adapt</param>
/// <returns>The adapted color</returns> /// <returns>The adapted color</returns>
public Rgb Adapt(Rgb color) public Rgb Adapt(in Rgb color)
{ {
LinearRgb linearInput = this.ToLinearRgb(color); LinearRgb linearInput = this.ToLinearRgb(color);
LinearRgb linearOutput = this.Adapt(linearInput); LinearRgb linearOutput = this.Adapt(linearInput);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLab.cs

@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(CieLch color) public CieLab ToCieLab(in CieLch color)
{ {
// Conversion (perserving white point) // Conversion (perserving white point)
CieLab unadapted = CieLchToCieLabConverter.Convert(color); CieLab unadapted = CieLchToCieLabConverter.Convert(color);
@ -40,7 +40,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(CieLchuv color) public CieLab ToCieLab(in CieLchuv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(CieLuv color) public CieLab ToCieLab(in CieLuv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -62,7 +62,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(CieXyy color) public CieLab ToCieLab(in CieXyy color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -73,7 +73,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(CieXyz color) public CieLab ToCieLab(in CieXyz color)
{ {
// Adaptation // Adaptation
CieXyz adapted = !this.WhitePoint.Equals(this.TargetLabWhitePoint) && this.IsChromaticAdaptationPerformed CieXyz adapted = !this.WhitePoint.Equals(this.TargetLabWhitePoint) && this.IsChromaticAdaptationPerformed
@ -90,7 +90,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(Cmyk color) public CieLab ToCieLab(in Cmyk color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(Hsl color) public CieLab ToCieLab(in Hsl color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -112,7 +112,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(Hsv color) public CieLab ToCieLab(in Hsv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -123,7 +123,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(HunterLab color) public CieLab ToCieLab(in HunterLab color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -134,7 +134,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(Lms color) public CieLab ToCieLab(in Lms color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -145,7 +145,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(LinearRgb color) public CieLab ToCieLab(in LinearRgb color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -156,7 +156,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(Rgb color) public CieLab ToCieLab(in Rgb color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);
@ -167,7 +167,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLab ToCieLab(YCbCr color) public CieLab ToCieLab(in YCbCr color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLab(xyzColor); return this.ToCieLab(xyzColor);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLch.cs

@ -20,7 +20,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(CieLab color) public CieLch ToCieLch(in CieLab color)
{ {
// Adaptation // Adaptation
CieLab adapted = this.IsChromaticAdaptationPerformed ? this.Adapt(color) : color; CieLab adapted = this.IsChromaticAdaptationPerformed ? this.Adapt(color) : color;
@ -34,7 +34,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(CieLchuv color) public CieLch ToCieLch(in CieLchuv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -45,7 +45,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(CieLuv color) public CieLch ToCieLch(in CieLuv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -56,7 +56,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(CieXyy color) public CieLch ToCieLch(in CieXyy color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -67,7 +67,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(CieXyz color) public CieLch ToCieLch(in CieXyz color)
{ {
CieLab labColor = this.ToCieLab(color); CieLab labColor = this.ToCieLab(color);
return this.ToCieLch(labColor); return this.ToCieLch(labColor);
@ -78,7 +78,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(Cmyk color) public CieLch ToCieLch(in Cmyk color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(Hsl color) public CieLch ToCieLch(in Hsl color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -100,7 +100,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(Hsv color) public CieLch ToCieLch(in Hsv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -111,7 +111,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(HunterLab color) public CieLch ToCieLch(in HunterLab color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -122,7 +122,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(LinearRgb color) public CieLch ToCieLch(in LinearRgb color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -133,7 +133,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(Lms color) public CieLch ToCieLch(in Lms color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -144,7 +144,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(Rgb color) public CieLch ToCieLch(in Rgb color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);
@ -155,7 +155,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLch"/></returns> /// <returns>The <see cref="CieLch"/></returns>
public CieLch ToCieLch(YCbCr color) public CieLch ToCieLch(in YCbCr color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLch(xyzColor); return this.ToCieLch(xyzColor);

24
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs

@ -20,7 +20,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(CieLab color) public CieLchuv ToCieLchuv(in CieLab color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -31,7 +31,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(CieLch color) public CieLchuv ToCieLchuv(in CieLch color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -42,7 +42,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(CieLuv color) public CieLchuv ToCieLchuv(in CieLuv color)
{ {
// Adaptation // Adaptation
CieLuv adapted = this.IsChromaticAdaptationPerformed ? this.Adapt(color) : color; CieLuv adapted = this.IsChromaticAdaptationPerformed ? this.Adapt(color) : color;
@ -56,7 +56,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(CieXyy color) public CieLchuv ToCieLchuv(in CieXyy color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -67,7 +67,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(CieXyz color) public CieLchuv ToCieLchuv(in CieXyz color)
{ {
CieLab labColor = this.ToCieLab(color); CieLab labColor = this.ToCieLab(color);
return this.ToCieLchuv(labColor); return this.ToCieLchuv(labColor);
@ -78,7 +78,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(Cmyk color) public CieLchuv ToCieLchuv(in Cmyk color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(Hsl color) public CieLchuv ToCieLchuv(in Hsl color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -100,7 +100,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(Hsv color) public CieLchuv ToCieLchuv(in Hsv color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -111,7 +111,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(HunterLab color) public CieLchuv ToCieLchuv(in HunterLab color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -122,7 +122,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(LinearRgb color) public CieLchuv ToCieLchuv(in LinearRgb color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -133,7 +133,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(Lms color) public CieLchuv ToCieLchuv(in Lms color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);
@ -155,7 +155,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLchuv"/></returns> /// <returns>The <see cref="CieLchuv"/></returns>
public CieLchuv ToCieLchuv(YCbCr color) public CieLchuv ToCieLchuv(in YCbCr color)
{ {
CieXyz xyzColor = this.ToCieXyz(color); CieXyz xyzColor = this.ToCieXyz(color);
return this.ToCieLchuv(xyzColor); return this.ToCieLchuv(xyzColor);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLuv.cs

@ -19,7 +19,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(CieLab color) public CieLuv ToCieLuv(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -30,7 +30,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(CieLch color) public CieLuv ToCieLuv(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLab"/></returns> /// <returns>The <see cref="CieLab"/></returns>
public CieLuv ToCieLuv(CieLchuv color) public CieLuv ToCieLuv(in CieLchuv color)
{ {
// Conversion (perserving white point) // Conversion (perserving white point)
CieLuv unadapted = CieLchuvToCieLuvConverter.Convert(color); CieLuv unadapted = CieLchuvToCieLuvConverter.Convert(color);
@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(CieXyy color) public CieLuv ToCieLuv(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -71,7 +71,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(CieXyz color) public CieLuv ToCieLuv(in CieXyz color)
{ {
// Adaptation // Adaptation
CieXyz adapted = !this.WhitePoint.Equals(this.TargetLabWhitePoint) && this.IsChromaticAdaptationPerformed CieXyz adapted = !this.WhitePoint.Equals(this.TargetLabWhitePoint) && this.IsChromaticAdaptationPerformed
@ -88,7 +88,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(Cmyk color) public CieLuv ToCieLuv(in Cmyk color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -99,7 +99,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(Hsl color) public CieLuv ToCieLuv(in Hsl color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -110,7 +110,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(Hsv color) public CieLuv ToCieLuv(in Hsv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -121,7 +121,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(HunterLab color) public CieLuv ToCieLuv(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -132,7 +132,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(Lms color) public CieLuv ToCieLuv(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -143,7 +143,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(LinearRgb color) public CieLuv ToCieLuv(in LinearRgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -154,7 +154,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(Rgb color) public CieLuv ToCieLuv(in Rgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);
@ -165,7 +165,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieLuv"/></returns> /// <returns>The <see cref="CieLuv"/></returns>
public CieLuv ToCieLuv(YCbCr color) public CieLuv ToCieLuv(in YCbCr color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToCieLuv(xyzColor); return this.ToCieLuv(xyzColor);

24
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyy.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(CieLab color) public CieXyy ToCieXyy(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(CieLch color) public CieXyy ToCieXyy(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(CieLchuv color) public CieXyy ToCieXyy(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(CieLuv color) public CieXyy ToCieXyy(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(CieXyz color) public CieXyy ToCieXyy(in CieXyz color)
{ {
return CieXyzAndCieXyyConverter.Convert(color); return CieXyzAndCieXyyConverter.Convert(color);
} }
@ -75,7 +75,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(Cmyk color) public CieXyy ToCieXyy(in Cmyk color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -99,7 +99,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(Hsv color) public CieXyy ToCieXyy(in Hsv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -111,7 +111,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(HunterLab color) public CieXyy ToCieXyy(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -123,7 +123,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(LinearRgb color) public CieXyy ToCieXyy(in LinearRgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -135,7 +135,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(Lms color) public CieXyy ToCieXyy(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -147,7 +147,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(Rgb color) public CieXyy ToCieXyy(in Rgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -159,7 +159,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyy"/></returns> /// <returns>The <see cref="CieXyy"/></returns>
public CieXyy ToCieXyy(YCbCr color) public CieXyy ToCieXyy(in YCbCr color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs

@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(CieLab color) public CieXyz ToCieXyz(in CieLab color)
{ {
// Conversion // Conversion
CieXyz unadapted = CieLabToCieXyzConverter.Convert(color); CieXyz unadapted = CieLabToCieXyzConverter.Convert(color);
@ -44,7 +44,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(CieLch color) public CieXyz ToCieXyz(in CieLch color)
{ {
// Conversion to Lab // Conversion to Lab
CieLab labColor = CieLchToCieLabConverter.Convert(color); CieLab labColor = CieLchToCieLabConverter.Convert(color);
@ -58,7 +58,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(CieLchuv color) public CieXyz ToCieXyz(in CieLchuv color)
{ {
// Conversion to Luv // Conversion to Luv
CieLuv luvColor = CieLchuvToCieLuvConverter.Convert(color); CieLuv luvColor = CieLchuvToCieLuvConverter.Convert(color);
@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(CieLuv color) public CieXyz ToCieXyz(in CieLuv color)
{ {
// Conversion // Conversion
CieXyz unadapted = CieLuvToCieXyzConverter.Convert(color); CieXyz unadapted = CieLuvToCieXyzConverter.Convert(color);
@ -90,7 +90,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(CieXyy color) public CieXyz ToCieXyz(in CieXyy color)
{ {
// Conversion // Conversion
return CieXyzAndCieXyyConverter.Convert(color); return CieXyzAndCieXyyConverter.Convert(color);
@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(Cmyk color) public CieXyz ToCieXyz(in Cmyk color)
{ {
// Conversion // Conversion
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -114,7 +114,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(Hsl color) public CieXyz ToCieXyz(in Hsl color)
{ {
// Conversion // Conversion
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -127,7 +127,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(Hsv color) public CieXyz ToCieXyz(in Hsv color)
{ {
// Conversion // Conversion
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -140,7 +140,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(HunterLab color) public CieXyz ToCieXyz(in HunterLab color)
{ {
// Conversion // Conversion
CieXyz unadapted = HunterLabToCieXyzConverter.Convert(color); CieXyz unadapted = HunterLabToCieXyzConverter.Convert(color);
@ -158,7 +158,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(LinearRgb color) public CieXyz ToCieXyz(in LinearRgb color)
{ {
// Conversion // Conversion
LinearRgbToCieXyzConverter converter = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace); LinearRgbToCieXyzConverter converter = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace);
@ -175,7 +175,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(Lms color) public CieXyz ToCieXyz(in Lms color)
{ {
// Conversion // Conversion
return this.cachedCieXyzAndLmsConverter.Convert(color); return this.cachedCieXyzAndLmsConverter.Convert(color);
@ -186,7 +186,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(Rgb color) public CieXyz ToCieXyz(in Rgb color)
{ {
// Conversion // Conversion
LinearRgb linear = RgbToLinearRgbConverter.Convert(color); LinearRgb linear = RgbToLinearRgbConverter.Convert(color);
@ -198,7 +198,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="CieXyz"/></returns> /// <returns>The <see cref="CieXyz"/></returns>
public CieXyz ToCieXyz(YCbCr color) public CieXyz ToCieXyz(in YCbCr color)
{ {
// Conversion // Conversion
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Cmyk.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(CieLab color) public Cmyk ToCmyk(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(CieLch color) public Cmyk ToCmyk(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(CieLchuv color) public Cmyk ToCmyk(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(CieLuv color) public Cmyk ToCmyk(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(CieXyy color) public Cmyk ToCmyk(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(CieXyz color) public Cmyk ToCmyk(in CieXyz color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(Hsl color) public Cmyk ToCmyk(in Hsl color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(Hsv color) public Cmyk ToCmyk(in Hsv color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -113,7 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(HunterLab color) public Cmyk ToCmyk(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -125,7 +125,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(LinearRgb color) public Cmyk ToCmyk(in LinearRgb color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -137,7 +137,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(Lms color) public Cmyk ToCmyk(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -149,7 +149,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(Rgb color) public Cmyk ToCmyk(in Rgb color)
{ {
return CmykAndRgbConverter.Convert(color); return CmykAndRgbConverter.Convert(color);
} }
@ -159,7 +159,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Cmyk"/></returns> /// <returns>The <see cref="Cmyk"/></returns>
public Cmyk ToCmyk(YCbCr color) public Cmyk ToCmyk(in YCbCr color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);

24
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsl.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(CieLab color) public Hsl ToHsl(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(CieLch color) public Hsl ToHsl(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(CieLchuv color) public Hsl ToHsl(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(CieLuv color) public Hsl ToHsl(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(CieXyy color) public Hsl ToHsl(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(CieXyz color) public Hsl ToHsl(in CieXyz color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(Cmyk color) public Hsl ToHsl(in Cmyk color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(Hsv color) public Hsl ToHsl(in Hsv color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -113,7 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(HunterLab color) public Hsl ToHsl(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -125,7 +125,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(LinearRgb color) public Hsl ToHsl(in LinearRgb color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -149,7 +149,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(Rgb color) public Hsl ToHsl(in Rgb color)
{ {
return HslAndRgbConverter.Convert(color); return HslAndRgbConverter.Convert(color);
} }
@ -159,7 +159,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsl"/></returns> /// <returns>The <see cref="Hsl"/></returns>
public Hsl ToHsl(YCbCr color) public Hsl ToHsl(in YCbCr color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);

24
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Hsv.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(CieLab color) public Hsv ToHsv(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(CieLch color) public Hsv ToHsv(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(CieLchuv color) public Hsv ToHsv(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(CieLuv color) public Hsv ToHsv(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(CieXyy color) public Hsv ToHsv(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(CieXyz color) public Hsv ToHsv(in CieXyz color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(Cmyk color) public Hsv ToHsv(in Cmyk color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(Hsl color) public Hsv ToHsv(in Hsl color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -113,7 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(HunterLab color) public Hsv ToHsv(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -125,7 +125,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(LinearRgb color) public Hsv ToHsv(in LinearRgb color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -149,7 +149,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(Rgb color) public Hsv ToHsv(in Rgb color)
{ {
return HsvAndRgbConverter.Convert(color); return HsvAndRgbConverter.Convert(color);
} }
@ -159,7 +159,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Hsv"/></returns> /// <returns>The <see cref="Hsv"/></returns>
public Hsv ToHsv(YCbCr color) public Hsv ToHsv(in YCbCr color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.HunterLab.cs

@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(CieLab color) public HunterLab ToHunterLab(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(CieLch color) public HunterLab ToHunterLab(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -37,7 +37,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(CieLchuv color) public HunterLab ToHunterLab(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(CieLuv color) public HunterLab ToHunterLab(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -59,7 +59,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(CieXyy color) public HunterLab ToHunterLab(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(CieXyz color) public HunterLab ToHunterLab(in CieXyz color)
{ {
// Adaptation // Adaptation
CieXyz adapted = !this.WhitePoint.Equals(this.TargetHunterLabWhitePoint) && this.IsChromaticAdaptationPerformed CieXyz adapted = !this.WhitePoint.Equals(this.TargetHunterLabWhitePoint) && this.IsChromaticAdaptationPerformed
@ -86,7 +86,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(Cmyk color) public HunterLab ToHunterLab(in Cmyk color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -97,7 +97,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(Hsl color) public HunterLab ToHunterLab(in Hsl color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -108,7 +108,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(Hsv color) public HunterLab ToHunterLab(in Hsv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -119,7 +119,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(LinearRgb color) public HunterLab ToHunterLab(in LinearRgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -130,7 +130,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(Lms color) public HunterLab ToHunterLab(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -141,7 +141,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(Rgb color) public HunterLab ToHunterLab(in Rgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);
@ -152,7 +152,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="HunterLab"/></returns> /// <returns>The <see cref="HunterLab"/></returns>
public HunterLab ToHunterLab(YCbCr color) public HunterLab ToHunterLab(in YCbCr color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToHunterLab(xyzColor); return this.ToHunterLab(xyzColor);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.LinearRgb.cs

@ -19,7 +19,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(CieLab color) public LinearRgb ToLinearRgb(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -30,7 +30,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(CieLch color) public LinearRgb ToLinearRgb(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(CieLchuv color) public LinearRgb ToLinearRgb(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -52,7 +52,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(CieLuv color) public LinearRgb ToLinearRgb(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -63,7 +63,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(CieXyy color) public LinearRgb ToLinearRgb(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -74,7 +74,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(CieXyz color) public LinearRgb ToLinearRgb(in CieXyz color)
{ {
// Adaptation // Adaptation
CieXyz adapted = this.TargetRgbWorkingSpace.WhitePoint.Equals(this.WhitePoint) || !this.IsChromaticAdaptationPerformed CieXyz adapted = this.TargetRgbWorkingSpace.WhitePoint.Equals(this.WhitePoint) || !this.IsChromaticAdaptationPerformed
@ -91,7 +91,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(Cmyk color) public LinearRgb ToLinearRgb(in Cmyk color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
return this.ToLinearRgb(rgb); return this.ToLinearRgb(rgb);
@ -102,7 +102,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(Hsl color) public LinearRgb ToLinearRgb(in Hsl color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
return this.ToLinearRgb(rgb); return this.ToLinearRgb(rgb);
@ -113,7 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(Hsv color) public LinearRgb ToLinearRgb(in Hsv color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
return this.ToLinearRgb(rgb); return this.ToLinearRgb(rgb);
@ -124,7 +124,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(HunterLab color) public LinearRgb ToLinearRgb(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -135,7 +135,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(Lms color) public LinearRgb ToLinearRgb(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLinearRgb(xyzColor); return this.ToLinearRgb(xyzColor);
@ -146,7 +146,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(Rgb color) public LinearRgb ToLinearRgb(in Rgb color)
{ {
// Conversion // Conversion
return RgbToLinearRgbConverter.Convert(color); return RgbToLinearRgbConverter.Convert(color);
@ -157,7 +157,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="LinearRgb"/></returns> /// <returns>The <see cref="LinearRgb"/></returns>
public LinearRgb ToLinearRgb(YCbCr color) public LinearRgb ToLinearRgb(in YCbCr color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
return this.ToLinearRgb(rgb); return this.ToLinearRgb(rgb);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Lms.cs

@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(CieLab color) public Lms ToLms(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(CieLch color) public Lms ToLms(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -37,7 +37,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(CieLchuv color) public Lms ToLms(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(CieLuv color) public Lms ToLms(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -59,7 +59,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(CieXyy color) public Lms ToLms(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -70,7 +70,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(CieXyz color) public Lms ToLms(in CieXyz color)
{ {
return this.cachedCieXyzAndLmsConverter.Convert(color); return this.cachedCieXyzAndLmsConverter.Convert(color);
} }
@ -80,7 +80,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(Cmyk color) public Lms ToLms(in Cmyk color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -91,7 +91,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(Hsl color) public Lms ToLms(in Hsl color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -102,7 +102,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(Hsv color) public Lms ToLms(in Hsv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -113,7 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(HunterLab color) public Lms ToLms(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -124,7 +124,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(LinearRgb color) public Lms ToLms(in LinearRgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -135,7 +135,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(Rgb color) public Lms ToLms(in Rgb color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);
@ -146,7 +146,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Lms"/></returns> /// <returns>The <see cref="Lms"/></returns>
public Lms ToLms(YCbCr color) public Lms ToLms(in YCbCr color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToLms(xyzColor); return this.ToLms(xyzColor);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Rgb.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(CieLab color) public Rgb ToRgb(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -28,7 +28,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(CieLch color) public Rgb ToRgb(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -39,7 +39,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(CieLchuv color) public Rgb ToRgb(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -50,7 +50,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(CieLuv color) public Rgb ToRgb(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -61,7 +61,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(CieXyy color) public Rgb ToRgb(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(CieXyz color) public Rgb ToRgb(in CieXyz color)
{ {
// Conversion // Conversion
var linear = this.ToLinearRgb(color); var linear = this.ToLinearRgb(color);
@ -86,7 +86,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(Cmyk color) public Rgb ToRgb(in Cmyk color)
{ {
// Conversion // Conversion
return CmykAndRgbConverter.Convert(color); return CmykAndRgbConverter.Convert(color);
@ -97,7 +97,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(Hsv color) public Rgb ToRgb(in Hsv color)
{ {
// Conversion // Conversion
return HsvAndRgbConverter.Convert(color); return HsvAndRgbConverter.Convert(color);
@ -108,7 +108,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(Hsl color) public Rgb ToRgb(in Hsl color)
{ {
// Conversion // Conversion
return HslAndRgbConverter.Convert(color); return HslAndRgbConverter.Convert(color);
@ -119,7 +119,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(HunterLab color) public Rgb ToRgb(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -130,7 +130,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(LinearRgb color) public Rgb ToRgb(in LinearRgb color)
{ {
// Conversion // Conversion
return LinearRgbToRgbConverter.Convert(color); return LinearRgbToRgbConverter.Convert(color);
@ -141,7 +141,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(Lms color) public Rgb ToRgb(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
return this.ToRgb(xyzColor); return this.ToRgb(xyzColor);
@ -152,7 +152,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="Rgb"/></returns> /// <returns>The <see cref="Rgb"/></returns>
public Rgb ToRgb(YCbCr color) public Rgb ToRgb(in YCbCr color)
{ {
// Conversion // Conversion
Rgb rgb = YCbCrAndRgbConverter.Convert(color); Rgb rgb = YCbCrAndRgbConverter.Convert(color);

26
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.YCbCr.cs

@ -17,7 +17,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(CieLab color) public YCbCr ToYCbCr(in CieLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -29,7 +29,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(CieLch color) public YCbCr ToYCbCr(in CieLch color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -41,7 +41,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(CieLchuv color) public YCbCr ToYCbCr(in CieLchuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -53,7 +53,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(CieLuv color) public YCbCr ToYCbCr(in CieLuv color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -65,7 +65,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(CieXyy color) public YCbCr ToYCbCr(in CieXyy color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(CieXyz color) public YCbCr ToYCbCr(in CieXyz color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -89,7 +89,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(Cmyk color) public YCbCr ToYCbCr(in Cmyk color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -101,7 +101,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(Hsl color) public YCbCr ToYCbCr(in Hsl color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -113,7 +113,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(Hsv color) public YCbCr ToYCbCr(in Hsv color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -125,7 +125,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(HunterLab color) public YCbCr ToYCbCr(in HunterLab color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -137,7 +137,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(LinearRgb color) public YCbCr ToYCbCr(in LinearRgb color)
{ {
var rgb = this.ToRgb(color); var rgb = this.ToRgb(color);
@ -149,7 +149,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(Lms color) public YCbCr ToYCbCr(in Lms color)
{ {
var xyzColor = this.ToCieXyz(color); var xyzColor = this.ToCieXyz(color);
@ -161,7 +161,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// </summary> /// </summary>
/// <param name="color">The color to convert.</param> /// <param name="color">The color to convert.</param>
/// <returns>The <see cref="YCbCr"/></returns> /// <returns>The <see cref="YCbCr"/></returns>
public YCbCr ToYCbCr(Rgb color) public YCbCr ToYCbCr(in Rgb color)
{ {
return YCbCrAndRgbConverter.Convert(color); return YCbCrAndRgbConverter.Convert(color);
} }

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/Rgb/RgbWorkingSpace.cs

@ -6,10 +6,10 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.RgbColorSap
/// <summary> /// <summary>
/// Trivial implementation of <see cref="IRgbWorkingSpace"/> /// Trivial implementation of <see cref="IRgbWorkingSpace"/>
/// </summary> /// </summary>
internal readonly struct RgbWorkingSpace : IRgbWorkingSpace internal class RgbWorkingSpace : IRgbWorkingSpace
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="RgbWorkingSpace"/> struct. /// Initializes a new instance of the <see cref="RgbWorkingSpace"/> class.
/// </summary> /// </summary>
/// <param name="referenceWhite">The reference white point.</param> /// <param name="referenceWhite">The reference white point.</param>
/// <param name="companding">The function pair for converting to <see cref="CieXyz"/> and back.</param> /// <param name="companding">The function pair for converting to <see cref="CieXyz"/> and back.</param>

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))
{ {

30
src/ImageSharp/ColorSpaces/Hsl.cs

@ -14,12 +14,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
internal readonly struct Hsl : IColorVector, IEquatable<Hsl>, IAlmostEquatable<Hsl, float> internal readonly struct Hsl : IColorVector, IEquatable<Hsl>, IAlmostEquatable<Hsl, float>
{ {
/// <summary> /// <summary>
/// Represents a <see cref="Hsl"/> that has H, S, and L values set to zero. /// Max range used for clamping.
/// </summary>
public static readonly Hsl Empty = default;
/// <summary>
/// Max range used for clamping
/// </summary> /// </summary>
private static readonly Vector3 VectorMax = new Vector3(360, 1, 1); private static readonly Vector3 VectorMax = new Vector3(360, 1, 1);
@ -80,18 +75,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="Hsl"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc/> /// <inheritdoc/>
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Compares two <see cref="Hsl"/> objects for equality. /// Compares two <see cref="Hsl"/> objects for equality.
@ -130,6 +115,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -138,16 +124,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "Hsl [ Empty ]"
return "Hsl [ Empty ]"; : $"Hsl [ H={this.H:#0.##}, S={this.S:#0.##}, L={this.L:#0.##} ]";
}
return $"Hsl [ H={this.H:#0.##}, S={this.S:#0.##}, L={this.L:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is Hsl other && this.Equals(other); return obj is Hsl other && this.Equals(other);

24
src/ImageSharp/ColorSpaces/Hsv.cs

@ -16,12 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
internal readonly struct Hsv : IColorVector, IEquatable<Hsv>, IAlmostEquatable<Hsv, float> internal readonly struct Hsv : IColorVector, IEquatable<Hsv>, IAlmostEquatable<Hsv, float>
{ {
/// <summary> /// <summary>
/// Represents a <see cref="Hsv"/> that has H, S, and V values set to zero. /// Max range used for clamping.
/// </summary>
public static readonly Hsv Empty = default;
/// <summary>
/// Max range used for clamping
/// </summary> /// </summary>
private static readonly Vector3 VectorMax = new Vector3(360, 1, 1); private static readonly Vector3 VectorMax = new Vector3(360, 1, 1);
@ -82,12 +77,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="Hsv"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc/> /// <inheritdoc/>
public Vector3 Vector public Vector3 Vector
{ {
@ -182,6 +171,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -190,16 +180,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "Hsv [ Empty ]"
return "Hsv [ Empty ]"; : $"Hsv [ H={this.H:#0.##}, S={this.S:#0.##}, V={this.V:#0.##} ]";
}
return $"Hsv [ H={this.H:#0.##}, S={this.S:#0.##}, V={this.V:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is Hsv other && this.Equals(other); return obj is Hsv other && this.Equals(other);

36
src/ImageSharp/ColorSpaces/HunterLab.cs

@ -20,11 +20,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
public static readonly CieXyz DefaultWhitePoint = Illuminants.C; public static readonly CieXyz DefaultWhitePoint = Illuminants.C;
/// <summary>
/// Represents a <see cref="HunterLab"/> that has L, A, B values set to zero.
/// </summary>
public static readonly HunterLab Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -115,18 +110,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="HunterLab"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Compares two <see cref="HunterLab"/> objects for equality. /// Compares two <see cref="HunterLab"/> objects for equality.
@ -140,7 +125,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <returns> /// <returns>
/// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false. /// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns> /// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(HunterLab left, HunterLab right) public static bool operator ==(HunterLab left, HunterLab right)
{ {
return left.Equals(right); return left.Equals(right);
@ -165,29 +149,21 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return HashHelpers.Combine(this.WhitePoint.GetHashCode(), this.backingVector.GetHashCode());
{
int hashCode = this.WhitePoint.GetHashCode();
hashCode = (hashCode * 397) ^ this.backingVector.GetHashCode();
return hashCode;
}
} }
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "HunterLab [Empty]"
return "HunterLab [Empty]"; : $"HunterLab [ L={this.L:#0.##}, A={this.A:#0.##}, B={this.B:#0.##}]";
}
return $"HunterLab [ L={this.L:#0.##}, A={this.A:#0.##}, B={this.B:#0.##}]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is HunterLab other && this.Equals(other); return obj is HunterLab other && this.Equals(other);

4
src/ImageSharp/ColorSpaces/IRgbWorkingSpace.cs

@ -12,12 +12,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
internal interface IRgbWorkingSpace : IEquatable<IRgbWorkingSpace> internal interface IRgbWorkingSpace : IEquatable<IRgbWorkingSpace>
{ {
/// <summary> /// <summary>
/// Gets the reference white of the color space /// Gets the reference white of the color space.
/// </summary> /// </summary>
CieXyz WhitePoint { get; } CieXyz WhitePoint { get; }
/// <summary> /// <summary>
/// Gets the chromaticity coordinates of the primaries /// Gets the chromaticity coordinates of the primaries.
/// </summary> /// </summary>
RgbPrimariesChromaticityCoordinates ChromaticityCoordinates { get; } RgbPrimariesChromaticityCoordinates ChromaticityCoordinates { get; }

30
src/ImageSharp/ColorSpaces/LinearRgb.cs

@ -14,12 +14,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
internal readonly struct LinearRgb : IColorVector, IEquatable<LinearRgb>, IAlmostEquatable<LinearRgb, float> internal readonly struct LinearRgb : IColorVector, IEquatable<LinearRgb>, IAlmostEquatable<LinearRgb, float>
{ {
/// <summary> /// <summary>
/// Represents a <see cref="LinearRgb"/> that has R, G, and B values set to zero. /// The default LinearRgb working space.
/// </summary>
public static readonly LinearRgb Empty = default;
/// <summary>
/// The default LinearRgb working space
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace DefaultWorkingSpace = RgbWorkingSpaces.SRgb; public static readonly IRgbWorkingSpace DefaultWorkingSpace = RgbWorkingSpaces.SRgb;
@ -112,18 +107,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
public IRgbWorkingSpace WorkingSpace { get; } public IRgbWorkingSpace WorkingSpace { get; }
/// <summary>
/// Gets a value indicating whether this <see cref="LinearRgb"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Compares two <see cref="LinearRgb"/> objects for equality. /// Compares two <see cref="LinearRgb"/> objects for equality.
@ -162,6 +147,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -170,16 +156,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "LinearRgb [ Empty ]"
return "LinearRgb [ Empty ]"; : $"LinearRgb [ R={this.R:#0.##}, G={this.G:#0.##}, B={this.B:#0.##} ]";
}
return $"LinearRgb [ R={this.R:#0.##}, G={this.G:#0.##}, B={this.B:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is LinearRgb other && this.Equals(other); return obj is LinearRgb other && this.Equals(other);

27
src/ImageSharp/ColorSpaces/Lms.cs

@ -15,11 +15,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
internal readonly struct Lms : IColorVector, IEquatable<Lms>, IAlmostEquatable<Lms, float> internal readonly struct Lms : IColorVector, IEquatable<Lms>, IAlmostEquatable<Lms, float>
{ {
/// <summary>
/// Represents a <see cref="Lms"/> that has L, M, and S values set to zero.
/// </summary>
public static readonly Lms Empty = default;
/// <summary> /// <summary>
/// The backing vector for SIMD support. /// The backing vector for SIMD support.
/// </summary> /// </summary>
@ -79,18 +74,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="Lms"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Compares two <see cref="Lms"/> objects for equality. /// Compares two <see cref="Lms"/> objects for equality.
@ -137,16 +122,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "Lms [ Empty ]"
return "Lms [ Empty ]"; : $"Lms [ L={this.L:#0.##}, M={this.M:#0.##}, S={this.S:#0.##} ]";
}
return $"Lms [ L={this.L:#0.##}, M={this.M:#0.##}, S={this.S:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is Lms other && this.Equals(other); return obj is Lms other && this.Equals(other);

33
src/ImageSharp/ColorSpaces/Rgb.cs

@ -15,11 +15,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// </summary> /// </summary>
internal readonly struct Rgb : IColorVector, IEquatable<Rgb>, IAlmostEquatable<Rgb, float> internal readonly struct Rgb : IColorVector, IEquatable<Rgb>, IAlmostEquatable<Rgb, float>
{ {
/// <summary>
/// Represents a <see cref="Rgb"/> that has R, G, and B values set to zero.
/// </summary>
public static readonly Rgb Empty = default;
/// <summary> /// <summary>
/// The default rgb working space /// The default rgb working space
/// </summary> /// </summary>
@ -112,24 +107,10 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <summary> /// <summary>
/// Gets the Rgb color space <seealso cref="RgbWorkingSpaces"/> /// Gets the Rgb color space <seealso cref="RgbWorkingSpaces"/>
/// </summary> /// </summary>
public IRgbWorkingSpace WorkingSpace public IRgbWorkingSpace WorkingSpace { get; }
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get;
}
/// <summary>
/// Gets a value indicating whether this <see cref="Rgb"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc /> /// <inheritdoc />
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Allows the implicit conversion of an instance of <see cref="Rgba32"/> to a /// Allows the implicit conversion of an instance of <see cref="Rgba32"/> to a
@ -192,16 +173,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "Rgb [ Empty ]"
return "Rgb [ Empty ]"; : $"Rgb [ R={this.R:#0.##}, G={this.G:#0.##}, B={this.B:#0.##} ]";
}
return $"Rgb [ R={this.R:#0.##}, G={this.G:#0.##}, B={this.B:#0.##} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is Rgb other && this.Equals(other); return obj is Rgb other && this.Equals(other);

72
src/ImageSharp/ColorSpaces/RgbWorkingSpaces.cs

@ -19,97 +19,97 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// Uses proper companding function, according to: /// Uses proper companding function, according to:
/// <see href="http://www.brucelindbloom.com/index.html?Eqn_Rgb_to_XYZ.html"/> /// <see href="http://www.brucelindbloom.com/index.html?Eqn_Rgb_to_XYZ.html"/>
/// </remarks> /// </remarks>
public static readonly IRgbWorkingSpace SRgb = new RgbWorkingSpace(Illuminants.D65, new SRgbCompanding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.3000F, 0.6000F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F))); public static readonly RgbWorkingSpace SRgb = new RgbWorkingSpace(Illuminants.D65, new SRgbCompanding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.3000F, 0.6000F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F)));
/// <summary> /// <summary>
/// Simplified sRgb working space (uses <see cref="GammaCompanding">gamma companding</see> instead of <see cref="SRgbCompanding"/>). /// Simplified sRgb working space (uses <see cref="GammaCompanding">gamma companding</see> instead of <see cref="SRgbCompanding"/>).
/// See also <see cref="SRgb"/>. /// See also <see cref="SRgb"/>.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace SRgbSimplified = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.3000F, 0.6000F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F))); public static readonly RgbWorkingSpace SRgbSimplified = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.3000F, 0.6000F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F)));
/// <summary> /// <summary>
/// Rec. 709 (ITU-R Recommendation BT.709) working space /// Rec. 709 (ITU-R Recommendation BT.709) working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace Rec709 = new RgbWorkingSpace(Illuminants.D65, new Rec709Companding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.64F, 0.33F), new CieXyChromaticityCoordinates(0.30F, 0.60F), new CieXyChromaticityCoordinates(0.15F, 0.06F))); public static readonly RgbWorkingSpace Rec709 = new RgbWorkingSpace(Illuminants.D65, new Rec709Companding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.64F, 0.33F), new CieXyChromaticityCoordinates(0.30F, 0.60F), new CieXyChromaticityCoordinates(0.15F, 0.06F)));
/// <summary> /// <summary>
/// Rec. 2020 (ITU-R Recommendation BT.2020F) working space /// Rec. 2020 (ITU-R Recommendation BT.2020F) working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace Rec2020 = new RgbWorkingSpace(Illuminants.D65, new Rec2020Companding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.708F, 0.292F), new CieXyChromaticityCoordinates(0.170F, 0.797F), new CieXyChromaticityCoordinates(0.131F, 0.046F))); public static readonly RgbWorkingSpace Rec2020 = new RgbWorkingSpace(Illuminants.D65, new Rec2020Companding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.708F, 0.292F), new CieXyChromaticityCoordinates(0.170F, 0.797F), new CieXyChromaticityCoordinates(0.131F, 0.046F)));
/// <summary> /// <summary>
/// ECI Rgb v2 working space /// ECI Rgb v2 working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace ECIRgbv2 = new RgbWorkingSpace(Illuminants.D50, new LCompanding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6700F, 0.3300F), new CieXyChromaticityCoordinates(0.2100F, 0.7100F), new CieXyChromaticityCoordinates(0.1400F, 0.0800F))); public static readonly RgbWorkingSpace ECIRgbv2 = new RgbWorkingSpace(Illuminants.D50, new LCompanding(), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6700F, 0.3300F), new CieXyChromaticityCoordinates(0.2100F, 0.7100F), new CieXyChromaticityCoordinates(0.1400F, 0.0800F)));
/// <summary> /// <summary>
/// Adobe Rgb (1998) working space /// Adobe Rgb (1998) working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace AdobeRgb1998 = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.2100F, 0.7100F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F))); public static readonly RgbWorkingSpace AdobeRgb1998 = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.2100F, 0.7100F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F)));
/// <summary> /// <summary>
/// Apple sRgb working space /// Apple sRgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace ApplesRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(1.8F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6250F, 0.3400F), new CieXyChromaticityCoordinates(0.2800F, 0.5950F), new CieXyChromaticityCoordinates(0.1550F, 0.0700F))); public static readonly RgbWorkingSpace ApplesRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(1.8F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6250F, 0.3400F), new CieXyChromaticityCoordinates(0.2800F, 0.5950F), new CieXyChromaticityCoordinates(0.1550F, 0.0700F)));
/// <summary> /// <summary>
/// Best Rgb working space /// Best Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace BestRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7347F, 0.2653F), new CieXyChromaticityCoordinates(0.2150F, 0.7750F), new CieXyChromaticityCoordinates(0.1300F, 0.0350F))); public static readonly RgbWorkingSpace BestRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7347F, 0.2653F), new CieXyChromaticityCoordinates(0.2150F, 0.7750F), new CieXyChromaticityCoordinates(0.1300F, 0.0350F)));
/// <summary> /// <summary>
/// Beta Rgb working space /// Beta Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace BetaRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6888F, 0.3112F), new CieXyChromaticityCoordinates(0.1986F, 0.7551F), new CieXyChromaticityCoordinates(0.1265F, 0.0352F))); public static readonly RgbWorkingSpace BetaRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6888F, 0.3112F), new CieXyChromaticityCoordinates(0.1986F, 0.7551F), new CieXyChromaticityCoordinates(0.1265F, 0.0352F)));
/// <summary> /// <summary>
/// Bruce Rgb working space /// Bruce Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace BruceRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.2800F, 0.6500F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F))); public static readonly RgbWorkingSpace BruceRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.2800F, 0.6500F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F)));
/// <summary> /// <summary>
/// CIE Rgb working space /// CIE Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace CIERgb = new RgbWorkingSpace(Illuminants.E, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7350F, 0.2650F), new CieXyChromaticityCoordinates(0.2740F, 0.7170F), new CieXyChromaticityCoordinates(0.1670F, 0.0090F))); public static readonly RgbWorkingSpace CIERgb = new RgbWorkingSpace(Illuminants.E, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7350F, 0.2650F), new CieXyChromaticityCoordinates(0.2740F, 0.7170F), new CieXyChromaticityCoordinates(0.1670F, 0.0090F)));
/// <summary> /// <summary>
/// ColorMatch Rgb working space /// ColorMatch Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace ColorMatchRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(1.8F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6300F, 0.3400F), new CieXyChromaticityCoordinates(0.2950F, 0.6050F), new CieXyChromaticityCoordinates(0.1500F, 0.0750F))); public static readonly RgbWorkingSpace ColorMatchRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(1.8F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6300F, 0.3400F), new CieXyChromaticityCoordinates(0.2950F, 0.6050F), new CieXyChromaticityCoordinates(0.1500F, 0.0750F)));
/// <summary> /// <summary>
/// Don Rgb 4 working space /// Don Rgb 4 working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace DonRgb4 = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6960F, 0.3000F), new CieXyChromaticityCoordinates(0.2150F, 0.7650F), new CieXyChromaticityCoordinates(0.1300F, 0.0350F))); public static readonly RgbWorkingSpace DonRgb4 = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6960F, 0.3000F), new CieXyChromaticityCoordinates(0.2150F, 0.7650F), new CieXyChromaticityCoordinates(0.1300F, 0.0350F)));
/// <summary> /// <summary>
/// Ekta Space PS5 working space /// Ekta Space PS5 working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace EktaSpacePS5 = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6950F, 0.3050F), new CieXyChromaticityCoordinates(0.2600F, 0.7000F), new CieXyChromaticityCoordinates(0.1100F, 0.0050F))); public static readonly RgbWorkingSpace EktaSpacePS5 = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6950F, 0.3050F), new CieXyChromaticityCoordinates(0.2600F, 0.7000F), new CieXyChromaticityCoordinates(0.1100F, 0.0050F)));
/// <summary> /// <summary>
/// NTSC Rgb working space /// NTSC Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace NTSCRgb = new RgbWorkingSpace(Illuminants.C, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6700F, 0.3300F), new CieXyChromaticityCoordinates(0.2100F, 0.7100F), new CieXyChromaticityCoordinates(0.1400F, 0.0800F))); public static readonly RgbWorkingSpace NTSCRgb = new RgbWorkingSpace(Illuminants.C, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6700F, 0.3300F), new CieXyChromaticityCoordinates(0.2100F, 0.7100F), new CieXyChromaticityCoordinates(0.1400F, 0.0800F)));
/// <summary> /// <summary>
/// PAL/SECAM Rgb working space /// PAL/SECAM Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace PALSECAMRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.2900F, 0.6000F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F))); public static readonly RgbWorkingSpace PALSECAMRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6400F, 0.3300F), new CieXyChromaticityCoordinates(0.2900F, 0.6000F), new CieXyChromaticityCoordinates(0.1500F, 0.0600F)));
/// <summary> /// <summary>
/// ProPhoto Rgb working space /// ProPhoto Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace ProPhotoRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(1.8F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7347F, 0.2653F), new CieXyChromaticityCoordinates(0.1596F, 0.8404F), new CieXyChromaticityCoordinates(0.0366F, 0.0001F))); public static readonly RgbWorkingSpace ProPhotoRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(1.8F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7347F, 0.2653F), new CieXyChromaticityCoordinates(0.1596F, 0.8404F), new CieXyChromaticityCoordinates(0.0366F, 0.0001F)));
/// <summary> /// <summary>
/// SMPTE-C Rgb working space /// SMPTE-C Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace SMPTECRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6300F, 0.3400F), new CieXyChromaticityCoordinates(0.3100F, 0.5950F), new CieXyChromaticityCoordinates(0.1550F, 0.0700F))); public static readonly RgbWorkingSpace SMPTECRgb = new RgbWorkingSpace(Illuminants.D65, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.6300F, 0.3400F), new CieXyChromaticityCoordinates(0.3100F, 0.5950F), new CieXyChromaticityCoordinates(0.1550F, 0.0700F)));
/// <summary> /// <summary>
/// Wide Gamut Rgb working space /// Wide Gamut Rgb working space.
/// </summary> /// </summary>
public static readonly IRgbWorkingSpace WideGamutRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7350F, 0.2650F), new CieXyChromaticityCoordinates(0.1150F, 0.8260F), new CieXyChromaticityCoordinates(0.1570F, 0.0180F))); public static readonly RgbWorkingSpace WideGamutRgb = new RgbWorkingSpace(Illuminants.D50, new GammaCompanding(2.2F), new RgbPrimariesChromaticityCoordinates(new CieXyChromaticityCoordinates(0.7350F, 0.2650F), new CieXyChromaticityCoordinates(0.1150F, 0.8260F), new CieXyChromaticityCoordinates(0.1570F, 0.0180F)));
} }
} }

31
src/ImageSharp/ColorSpaces/YCbCr.cs

@ -16,12 +16,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
internal readonly struct YCbCr : IColorVector, IEquatable<YCbCr>, IAlmostEquatable<YCbCr, float> internal readonly struct YCbCr : IColorVector, IEquatable<YCbCr>, IAlmostEquatable<YCbCr, float>
{ {
/// <summary> /// <summary>
/// Represents a <see cref="YCbCr"/> that has Y, Cb, and Cr values set to zero. /// Vector which is used in clamping to the max value.
/// </summary>
public static readonly YCbCr Empty = default;
/// <summary>
/// Vector which is used in clamping to the max value
/// </summary> /// </summary>
private static readonly Vector3 VectorMax = new Vector3(255F); private static readonly Vector3 VectorMax = new Vector3(255F);
@ -82,18 +77,8 @@ namespace SixLabors.ImageSharp.ColorSpaces
get => this.backingVector.Z; get => this.backingVector.Z;
} }
/// <summary>
/// Gets a value indicating whether this <see cref="YCbCr"/> is empty.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public bool IsEmpty => this.Equals(Empty);
/// <inheritdoc/> /// <inheritdoc/>
public Vector3 Vector public Vector3 Vector => this.backingVector;
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => this.backingVector;
}
/// <summary> /// <summary>
/// Compares two <see cref="YCbCr"/> objects for equality. /// Compares two <see cref="YCbCr"/> objects for equality.
@ -107,7 +92,6 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <returns> /// <returns>
/// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false. /// True if the current left is equal to the <paramref name="right"/> parameter; otherwise, false.
/// </returns> /// </returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(YCbCr left, YCbCr right) public static bool operator ==(YCbCr left, YCbCr right)
{ {
return left.Equals(right); return left.Equals(right);
@ -132,6 +116,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode() public override int GetHashCode()
{ {
return this.backingVector.GetHashCode(); return this.backingVector.GetHashCode();
@ -140,16 +125,12 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// <inheritdoc/> /// <inheritdoc/>
public override string ToString() public override string ToString()
{ {
if (this.IsEmpty) return this.Equals(default)
{ ? "YCbCr [ Empty ]"
return "YCbCr [ Empty ]"; : $"YCbCr [ Y={this.Y}, Cb={this.Cb}, Cr={this.Cr} ]";
}
return $"YCbCr [ Y={this.Y}, Cb={this.Cb}, Cr={this.Cr} ]";
} }
/// <inheritdoc/> /// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return obj is YCbCr other && this.Equals(other); return obj is YCbCr other && this.Equals(other);

2
src/ImageSharp/MetaData/Profiles/ICC/Curves/IccOneDimensionalCurve.cs

@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return this.BreakPoints.SequenceEqual(other.BreakPoints) return this.BreakPoints.AsSpan().SequenceEqual(other.BreakPoints)
&& this.Segments.SequenceEqual(other.Segments); && this.Segments.SequenceEqual(other.Segments);
} }
} }

2
src/ImageSharp/MetaData/Profiles/ICC/Curves/IccResponseCurve.cs

@ -60,7 +60,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
} }
return this.CurveType == other.CurveType return this.CurveType == other.CurveType
&& this.XyzValues.SequenceEqual(other.XyzValues) && this.XyzValues.AsSpan().SequenceEqual(other.XyzValues)
&& this.EqualsResponseArray(other); && this.EqualsResponseArray(other);
} }

3
src/ImageSharp/MetaData/Profiles/ICC/Curves/IccSampledCurveElement.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -34,7 +33,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
if (base.Equals(other) && other is IccSampledCurveElement segment) if (base.Equals(other) && other is IccSampledCurveElement segment)
{ {
return this.CurveEntries.SequenceEqual(segment.CurveEntries); return this.CurveEntries.AsSpan().SequenceEqual(segment.CurveEntries);
} }
return false; return false;

3
src/ImageSharp/MetaData/Profiles/ICC/MultiProcessElements/IccMatrixProcessElement.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
using SixLabors.ImageSharp.Primitives; using SixLabors.ImageSharp.Primitives;
@ -47,7 +46,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
if (base.Equals(other) && other is IccMatrixProcessElement element) if (base.Equals(other) && other is IccMatrixProcessElement element)
{ {
return this.EqualsMatrix(element) return this.EqualsMatrix(element)
&& this.MatrixOx1.SequenceEqual(element.MatrixOx1); && this.MatrixOx1.AsSpan().SequenceEqual(element.MatrixOx1);
} }
return false; return false;

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccColorantOrderTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -59,7 +58,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.ColorantNumber.SequenceEqual(other.ColorantNumber); return base.Equals(other) && this.ColorantNumber.AsSpan().SequenceEqual(other.ColorantNumber);
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccCurveTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -107,7 +106,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.CurveData.SequenceEqual(other.CurveData); return base.Equals(other) && this.CurveData.AsSpan().SequenceEqual(other.CurveData);
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccDataTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
using System.Text; using System.Text;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
@ -83,7 +82,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data) && this.IsAscii == other.IsAscii; return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data) && this.IsAscii == other.IsAscii;
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccFix16ArrayTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -56,7 +55,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccProfileSequenceIdentifierTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -57,7 +56,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc /> /// <inheritdoc />

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccScreeningTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -68,7 +67,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return base.Equals(other) return base.Equals(other)
&& this.Flags == other.Flags && this.Flags == other.Flags
&& this.Channels.SequenceEqual(other.Channels); && this.Channels.AsSpan().SequenceEqual(other.Channels);
} }
/// <inheritdoc /> /// <inheritdoc />

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUFix16ArrayTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -56,7 +55,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt16ArrayTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -56,7 +55,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt32ArrayTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -56,7 +55,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

2
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt64ArrayTagDataEntry.cs

@ -56,7 +56,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUInt8ArrayTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -56,7 +55,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

5
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUcrBgTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -77,8 +76,8 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
} }
return base.Equals(other) return base.Equals(other)
&& this.UcrCurve.SequenceEqual(other.UcrCurve) && this.UcrCurve.AsSpan().SequenceEqual(other.UcrCurve)
&& this.BgCurve.SequenceEqual(other.BgCurve) && this.BgCurve.AsSpan().SequenceEqual(other.BgCurve)
&& string.Equals(this.Description, other.Description); && string.Equals(this.Description, other.Description);
} }

3
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccUnknownTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -56,7 +55,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return base.Equals(other) && this.Data.SequenceEqual(other.Data); return base.Equals(other) && this.Data.AsSpan().SequenceEqual(other.Data);
} }
/// <inheritdoc/> /// <inheritdoc/>

7
src/ImageSharp/MetaData/Profiles/ICC/TagDataEntries/IccXyzTagDataEntry.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
using System.Numerics; using System.Numerics;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
@ -15,7 +14,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="IccXyzTagDataEntry"/> class. /// Initializes a new instance of the <see cref="IccXyzTagDataEntry"/> class.
/// </summary> /// </summary>
/// <param name="data">The XYZ numbers</param> /// <param name="data">The XYZ numbers.</param>
public IccXyzTagDataEntry(Vector3[] data) public IccXyzTagDataEntry(Vector3[] data)
: this(data, IccProfileTag.Unknown) : this(data, IccProfileTag.Unknown)
{ {
@ -34,7 +33,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
} }
/// <summary> /// <summary>
/// Gets the XYZ numbers /// Gets the XYZ numbers.
/// </summary> /// </summary>
public Vector3[] Data { get; } public Vector3[] Data { get; }
@ -43,7 +42,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
if (base.Equals(other) && other is IccXyzTagDataEntry entry) if (base.Equals(other) && other is IccXyzTagDataEntry entry)
{ {
return this.Data.SequenceEqual(entry.Data); return this.Data.AsSpan().SequenceEqual(entry.Data);
} }
return false; return false;

4
src/ImageSharp/MetaData/Profiles/ICC/Various/IccClut.cs

@ -130,7 +130,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
&& this.DataType == other.DataType && this.DataType == other.DataType
&& this.InputChannelCount == other.InputChannelCount && this.InputChannelCount == other.InputChannelCount
&& this.OutputChannelCount == other.OutputChannelCount && this.OutputChannelCount == other.OutputChannelCount
&& this.GridPointCount.SequenceEqual(other.GridPointCount); && this.GridPointCount.AsSpan().SequenceEqual(other.GridPointCount);
} }
/// <inheritdoc/> /// <inheritdoc/>
@ -162,7 +162,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
for (int i = 0; i < this.Values.Length; i++) for (int i = 0; i < this.Values.Length; i++)
{ {
if (!this.Values[i].SequenceEqual(other.Values[i])) if (!this.Values[i].AsSpan().SequenceEqual(other.Values[i]))
{ {
return false; return false;
} }

3
src/ImageSharp/MetaData/Profiles/ICC/Various/IccLut.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Linq;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
@ -68,7 +67,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return true; return true;
} }
return this.Values.SequenceEqual(other.Values); return this.Values.AsSpan().SequenceEqual(other.Values);
} }
} }
} }

15
src/ImageSharp/MetaData/Profiles/ICC/Various/IccProfileId.cs

@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
/// <summary> /// <summary>
/// A profile ID with all values set to zero /// A profile ID with all values set to zero
/// </summary> /// </summary>
public static readonly IccProfileId Zero = new IccProfileId(0, 0, 0, 0); public static readonly IccProfileId Zero = default;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="IccProfileId"/> struct. /// Initializes a new instance of the <see cref="IccProfileId"/> struct.
@ -53,16 +53,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
/// <summary> /// <summary>
/// Gets a value indicating whether the ID is set or just consists of zeros /// Gets a value indicating whether the ID is set or just consists of zeros
/// </summary> /// </summary>
public bool IsSet public bool IsSet => !this.Equals(Zero);
{
get
{
return this.Part1 != 0
&& this.Part2 != 0
&& this.Part3 != 0
&& this.Part4 != 0;
}
}
/// <summary> /// <summary>
/// Compares two <see cref="IccProfileId"/> objects for equality. /// Compares two <see cref="IccProfileId"/> objects for equality.
@ -131,4 +122,4 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
return value.ToString("X").PadLeft(8, '0'); return value.ToString("X").PadLeft(8, '0');
} }
} }
} }

2
src/ImageSharp/MetaData/Profiles/ICC/Various/IccScreeningChannel.cs

@ -2,12 +2,14 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.Runtime.InteropServices;
namespace SixLabors.ImageSharp.MetaData.Profiles.Icc namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
{ {
/// <summary> /// <summary>
/// A single channel of a <see cref="IccScreeningTagDataEntry"/> /// A single channel of a <see cref="IccScreeningTagDataEntry"/>
/// </summary> /// </summary>
[StructLayout(LayoutKind.Sequential)]
internal readonly struct IccScreeningChannel : IEquatable<IccScreeningChannel> internal readonly struct IccScreeningChannel : IEquatable<IccScreeningChannel>
{ {
/// <summary> /// <summary>

24
tests/ImageSharp.Tests/Colorspaces/ColorSpaceEqualityTests.cs

@ -19,18 +19,18 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
internal static readonly Dictionary<string, IColorVector> EmptyDataLookup = internal static readonly Dictionary<string, IColorVector> EmptyDataLookup =
new Dictionary<string, IColorVector> new Dictionary<string, IColorVector>
{ {
{nameof( CieLab), CieLab.Empty }, {nameof( CieLab), default(CieLab) },
{nameof( CieLch), CieLch.Empty }, {nameof( CieLch), default(CieLch) },
{nameof( CieLchuv), CieLchuv.Empty }, {nameof( CieLchuv), default(CieLchuv) },
{nameof( CieLuv), CieLuv.Empty }, {nameof( CieLuv), default(CieLuv) },
{nameof( CieXyz), CieXyz.Empty }, {nameof( CieXyz), default(CieXyz) },
{nameof( CieXyy), CieXyy.Empty }, {nameof( CieXyy), default(CieXyy) },
{nameof( Hsl), Hsl.Empty }, {nameof( Hsl), default(Hsl) },
{nameof( HunterLab), HunterLab.Empty }, {nameof( HunterLab), default(HunterLab) },
{nameof( Lms), Lms.Empty }, {nameof( Lms), default(Lms) },
{nameof( LinearRgb), LinearRgb.Empty }, {nameof( LinearRgb), default(LinearRgb) },
{nameof( Rgb), Rgb.Empty }, {nameof( Rgb), default(Rgb) },
{nameof( YCbCr), YCbCr.Empty } {nameof( YCbCr), default(YCbCr) }
}; };
public static readonly IEnumerable<object[]> EmptyData = EmptyDataLookup.Select(x => new [] { x.Key }); public static readonly IEnumerable<object[]> EmptyData = EmptyDataLookup.Select(x => new [] { x.Key });

32
tests/ImageSharp.Tests/MetaData/Profiles/ICC/Various/IccProfileIdTests.cs

@ -0,0 +1,32 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
using SixLabors.ImageSharp.MetaData.Profiles.Icc;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Icc
{
public class IccProfileIdTests
{
[Fact]
public void ZeroIsEqualToDefault()
{
Assert.True(IccProfileId.Zero.Equals(default));
Assert.False(default(IccProfileId).IsSet);
}
[Fact]
public void SetIsTrueWhenNonDefaultValue()
{
var id = new IccProfileId(1, 2, 3, 4);
Assert.True(id.IsSet);
Assert.Equal(1u, id.Part1);
Assert.Equal(2u, id.Part2);
Assert.Equal(3u, id.Part3);
Assert.Equal(4u, id.Part4);
}
}
}
Loading…
Cancel
Save