diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs
index 3d77b0076..8d20ec0a6 100644
--- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs
+++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieLchuv.cs
@@ -159,9 +159,9 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// The
public CieLchuv ToCieLchuv(in CieXyz color)
{
- var labColor = this.ToCieLab(color);
+ var luvColor = this.ToCieLuv(color);
- return this.ToCieLchuv(labColor);
+ return this.ToCieLchuv(luvColor);
}
///
diff --git a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs
index 8fd6ca449..bcbd64c77 100644
--- a/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs
+++ b/src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs
@@ -12,11 +12,12 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
public partial class ColorSpaceConverter
{
// Options.
- private Matrix4x4 lmsAdaptationMatrix;
- private CieXyz whitePoint;
- private CieXyz targetLuvWhitePoint;
- private CieXyz targetLabWhitePoint;
- private CieXyz targetHunterLabWhitePoint;
+ private static readonly ColorSpaceConverterOptions DefaultOptions = new ColorSpaceConverterOptions();
+ private readonly Matrix4x4 lmsAdaptationMatrix;
+ private readonly CieXyz whitePoint;
+ private readonly CieXyz targetLuvWhitePoint;
+ private readonly CieXyz targetLabWhitePoint;
+ private readonly CieXyz targetHunterLabWhitePoint;
private readonly RgbWorkingSpace targetRgbWorkingSpace;
private readonly IChromaticAdaptation chromaticAdaptation;
private readonly bool performChromaticAdaptation;
@@ -30,7 +31,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// Initializes a new instance of the class.
///
public ColorSpaceConverter()
- : this(new ColorSpaceConverterOptions())
+ : this(DefaultOptions)
{
}
diff --git a/src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs b/src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs
index e84b8bf25..1b14c6413 100644
--- a/src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs
+++ b/src/ImageSharp/ColorSpaces/Conversion/IChromaticAdaptation.cs
@@ -1,6 +1,8 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
+using System;
+
namespace SixLabors.ImageSharp.ColorSpaces.Conversion
{
///
@@ -14,10 +16,21 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
/// Performs a linear transformation of a source color in to the destination color.
///
/// Doesn't crop the resulting color space coordinates (e. g. allows negative values for XYZ coordinates).
- /// The source color.
+ /// The source color.
/// The source white point.
- /// The target white point.
+ /// The destination white point.
/// The
- CieXyz Transform(in CieXyz sourceColor, in CieXyz sourceWhitePoint, in CieXyz targetWhitePoint);
+ CieXyz Transform(in CieXyz source, in CieXyz sourceWhitePoint, in CieXyz destinationWhitePoint);
+
+ ///
+ /// Performs a bulk linear transformation of a source color in to the destination color.
+ ///
+ /// Doesn't crop the resulting color space coordinates (e. g. allows negative values for XYZ coordinates).
+ /// The span to the source colors.
+ /// The span to the destination colors.
+ /// The source white point.
+ /// The destination white point.
+ /// The number of colors to convert.
+ void Transform(Span source, Span destination, CieXyz sourceWhitePoint, in CieXyz destinationWhitePoint, int count);
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs b/src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs
index bc840f746..9b200b873 100644
--- a/src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs
+++ b/src/ImageSharp/ColorSpaces/Conversion/VonKriesChromaticAdaptation.cs
@@ -1,7 +1,10 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
+using System;
using System.Numerics;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion
@@ -44,21 +47,51 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion
internal VonKriesChromaticAdaptation(CieXyzAndLmsConverter converter) => this.converter = converter;
///
- public CieXyz Transform(in CieXyz sourceColor, in CieXyz sourceWhitePoint, in CieXyz targetWhitePoint)
+ public CieXyz Transform(in CieXyz source, in CieXyz sourceWhitePoint, in CieXyz destinationWhitePoint)
{
- if (sourceWhitePoint.Equals(targetWhitePoint))
+ if (sourceWhitePoint.Equals(destinationWhitePoint))
{
- return sourceColor;
+ return source;
}
- Lms sourceColorLms = this.converter.Convert(sourceColor);
+ Lms sourceColorLms = this.converter.Convert(source);
Lms sourceWhitePointLms = this.converter.Convert(sourceWhitePoint);
- Lms targetWhitePointLms = this.converter.Convert(targetWhitePoint);
+ Lms targetWhitePointLms = this.converter.Convert(destinationWhitePoint);
Vector3 vector = targetWhitePointLms.ToVector3() / sourceWhitePointLms.ToVector3();
var targetColorLms = new Lms(Vector3.Multiply(vector, sourceColorLms.ToVector3()));
return this.converter.Convert(targetColorLms);
}
+
+ ///
+ public void Transform(Span source, Span destination, CieXyz sourceWhitePoint, in CieXyz destinationWhitePoint, int count)
+ {
+ Guard.SpansMustBeSizedAtLeast(source, nameof(source), destination, nameof(destination), count);
+
+ if (sourceWhitePoint.Equals(destinationWhitePoint))
+ {
+ source.CopyTo(destination.Slice(0, count));
+ return;
+ }
+
+ ref CieXyz sourceRef = ref MemoryMarshal.GetReference(source);
+ ref CieXyz destRef = ref MemoryMarshal.GetReference(destination);
+
+ for (int i = 0; i < count; i++)
+ {
+ ref CieXyz sp = ref Unsafe.Add(ref sourceRef, i);
+ ref CieXyz dp = ref Unsafe.Add(ref destRef, i);
+
+ Lms sourceColorLms = this.converter.Convert(sp);
+ Lms sourceWhitePointLms = this.converter.Convert(sourceWhitePoint);
+ Lms targetWhitePointLms = this.converter.Convert(destinationWhitePoint);
+
+ Vector3 vector = targetWhitePointLms.ToVector3() / sourceWhitePointLms.ToVector3();
+ var targetColorLms = new Lms(Vector3.Multiply(vector, sourceColorLms.ToVector3()));
+
+ dp = this.converter.Convert(targetColorLms);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/ColorSpaces/LinearRgb.cs b/src/ImageSharp/ColorSpaces/LinearRgb.cs
index 63a5acace..9ecef0a31 100644
--- a/src/ImageSharp/ColorSpaces/LinearRgb.cs
+++ b/src/ImageSharp/ColorSpaces/LinearRgb.cs
@@ -52,7 +52,7 @@ namespace SixLabors.ImageSharp.ColorSpaces
/// The blue component ranging between 0 and 1.
[MethodImpl(InliningOptions.ShortMethod)]
public LinearRgb(float r, float g, float b)
- : this(new Vector3(r, g, b))
+ : this(r, g, b, DefaultWorkingSpace)
{
}
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs
index a7469243f..dbc07b916 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CieLabTests.cs
@@ -38,6 +38,9 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Assert.Equal(new CieLab(1, 0, 1), new CieLab(1, 0, 1));
Assert.Equal(new CieLab(Vector3.One), new CieLab(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(default(CieLab) == new CieLab(1, 0, 1));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs
index fe4bf17d3..90c2c2244 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CieLchTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(CieLch);
var y = new CieLch(Vector3.One);
+
+ Assert.True(default(CieLch) == default(CieLch));
+ Assert.False(default(CieLch) != default(CieLch));
Assert.Equal(default(CieLch), default(CieLch));
Assert.Equal(new CieLch(1, 0, 1), new CieLch(1, 0, 1));
Assert.Equal(new CieLch(Vector3.One), new CieLch(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs
index 10e1bedf7..a6a5fa32a 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CieLchuvTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(CieLchuv);
var y = new CieLchuv(Vector3.One);
+
+ Assert.True(default(CieLchuv) == default(CieLchuv));
+ Assert.False(default(CieLchuv) != default(CieLchuv));
Assert.Equal(default(CieLchuv), default(CieLchuv));
Assert.Equal(new CieLchuv(1, 0, 1), new CieLchuv(1, 0, 1));
Assert.Equal(new CieLchuv(Vector3.One), new CieLchuv(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs
index 556becffc..dbf64cb1d 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CieLuvTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(CieLuv);
var y = new CieLuv(Vector3.One);
+
+ Assert.True(default(CieLuv) == default(CieLuv));
+ Assert.False(default(CieLuv) != default(CieLuv));
Assert.Equal(default(CieLuv), default(CieLuv));
Assert.Equal(new CieLuv(1, 0, 1), new CieLuv(1, 0, 1));
Assert.Equal(new CieLuv(Vector3.One), new CieLuv(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs
new file mode 100644
index 000000000..42ace9dbe
--- /dev/null
+++ b/tests/ImageSharp.Tests/Colorspaces/CieXyChromaticityCoordinatesTests.cs
@@ -0,0 +1,43 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.ColorSpaces;
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests.Colorspaces
+{
+ ///
+ /// Tests the struct.
+ ///
+ public class CieXyChromaticityCoordinatesTests
+ {
+ [Fact]
+ public void CieXyChromaticityCoordinatesConstructorAssignsFields()
+ {
+ const float x = .75F;
+ const float y = .64F;
+ var coordinates = new CieXyChromaticityCoordinates(x, y);
+
+ Assert.Equal(x, coordinates.X);
+ Assert.Equal(y, coordinates.Y);
+ }
+
+ [Fact]
+ public void CieXyChromaticityCoordinatesEquality()
+ {
+ var x = default(CieXyChromaticityCoordinates);
+ var y = new CieXyChromaticityCoordinates(1, 1);
+
+ Assert.True(default(CieXyChromaticityCoordinates) == default(CieXyChromaticityCoordinates));
+ Assert.True(default(CieXyChromaticityCoordinates) != new CieXyChromaticityCoordinates(1, 0));
+ Assert.False(default(CieXyChromaticityCoordinates) == new CieXyChromaticityCoordinates(1, 0));
+ Assert.Equal(default(CieXyChromaticityCoordinates), default(CieXyChromaticityCoordinates));
+ Assert.Equal(new CieXyChromaticityCoordinates(1, 0), new CieXyChromaticityCoordinates(1, 0));
+ Assert.Equal(new CieXyChromaticityCoordinates(1, 1), new CieXyChromaticityCoordinates(1, 1));
+ Assert.False(x.Equals(y));
+ Assert.False(default(CieXyChromaticityCoordinates) == new CieXyChromaticityCoordinates(1, 0));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs
index df7d8953f..88196034b 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CieXyyTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(CieXyy);
var y = new CieXyy(Vector3.One);
+
+ Assert.True(default(CieXyy) == default(CieXyy));
+ Assert.False(default(CieXyy) != default(CieXyy));
Assert.Equal(default(CieXyy), default(CieXyy));
Assert.Equal(new CieXyy(1, 0, 1), new CieXyy(1, 0, 1));
Assert.Equal(new CieXyy(Vector3.One), new CieXyy(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
diff --git a/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs b/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs
index dac7483da..3c77f132e 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CieXyzTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(CieXyz);
var y = new CieXyz(Vector3.One);
+
+ Assert.True(default(CieXyz) == default(CieXyz));
+ Assert.False(default(CieXyz) != default(CieXyz));
Assert.Equal(default(CieXyz), default(CieXyz));
Assert.Equal(new CieXyz(1, 0, 1), new CieXyz(1, 0, 1));
Assert.Equal(new CieXyz(Vector3.One), new CieXyz(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
diff --git a/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs b/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs
index 57ece60c9..dbf3fe6d8 100644
--- a/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/CmykTests.cs
@@ -32,10 +32,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(Cmyk);
var y = new Cmyk(Vector4.One);
+
+ Assert.True(default(Cmyk) == default(Cmyk));
+ Assert.False(default(Cmyk) != default(Cmyk));
Assert.Equal(default(Cmyk), default(Cmyk));
Assert.Equal(new Cmyk(1, 0, 1, 0), new Cmyk(1, 0, 1, 0));
Assert.Equal(new Cmyk(Vector4.One), new Cmyk(Vector4.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs
index d3d759825..eb9a50d18 100644
--- a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchConversionTests.cs
@@ -68,7 +68,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Conversion
[InlineData(10, -20, 30, 10, 36.0555, 123.6901)]
[InlineData(10, 20, -30, 10, 36.0555, 303.6901)]
[InlineData(10, -20, -30, 10, 36.0555, 236.3099)]
- public void Convert_Lab_to_LCHab(float l, float a, float b, float l2, float c, float h)
+ public void Convert_Lab_to_Lch(float l, float a, float b, float l2, float c, float h)
{
// Arrange
var input = new CieLab(l, a, b);
diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs
new file mode 100644
index 000000000..58b2e5bdb
--- /dev/null
+++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/CieLabAndCieLchuvConversionTests.cs
@@ -0,0 +1,96 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using System;
+using SixLabors.ImageSharp.ColorSpaces;
+using SixLabors.ImageSharp.ColorSpaces.Conversion;
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests.Colorspaces.Conversion
+{
+ ///
+ /// Tests - conversions.
+ ///
+ ///
+ /// Test data generated using:
+ ///
+ ///
+ public class CieLabAndCieLchuvConversionTests
+ {
+ private static readonly ApproximateColorSpaceComparer ColorSpaceComparer = new ApproximateColorSpaceComparer(.0001F);
+ private static readonly ColorSpaceConverter Converter = new ColorSpaceConverter();
+
+ ///
+ /// Tests conversion from to .
+ ///
+ [Theory]
+ [InlineData(0, 0, 0, 0, 0, 0)]
+ [InlineData(54.2917, 106.8391, 40.8526, 54.9205055, 30.7944126, 93.17662)]
+ [InlineData(100, 0, 0, 100, 0, 0)]
+ [InlineData(100, 50, 180, 99.74778, -35.5287476, -4.24233675)]
+ [InlineData(10, 36.0555, 56.3099, 10.2056971, 7.886916, 17.498457)]
+ [InlineData(10, 36.0555, 123.6901, 9.953703, -35.1176033, 16.8696461)]
+ [InlineData(10, 36.0555, 303.6901, 9.805839, 55.69225, -36.6074753)]
+ [InlineData(10, 36.0555, 236.3099, 8.86916, -34.4068336, -42.2136269)]
+ public void Convert_Lchuv_to_Lab(float l, float c, float h, float l2, float a, float b)
+ {
+ // Arrange
+ var input = new CieLchuv(l, c, h);
+ var expected = new CieLab(l2, a, b);
+
+ Span inputSpan = new CieLchuv[5];
+ inputSpan.Fill(input);
+
+ Span actualSpan = new CieLab[5];
+
+ // Act
+ var actual = Converter.ToCieLab(input);
+ Converter.Convert(inputSpan, actualSpan, actualSpan.Length);
+
+ // Assert
+ Assert.Equal(expected, actual, ColorSpaceComparer);
+
+ for (int i = 0; i < actualSpan.Length; i++)
+ {
+ Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
+ }
+ }
+
+ ///
+ /// Tests conversion from to .
+ ///
+ [Theory]
+ [InlineData(0, 0, 0, 0, 0, 0)]
+ [InlineData(54.9205055, 30.7944126, 93.17662, 54.9205055, 103.269287, 35.46892)]
+ [InlineData(100, 0, 0, 100, 29.5789261, 60.1635857)]
+ [InlineData(99.74778, -35.5287476, -4.24233675, 99.74778, 48.8177834, 139.54837)]
+ [InlineData(10.2056971, 7.886916, 17.498457, 10.205699, 17.00984, 42.9908066)]
+ [InlineData(9.953703, -35.1176033, 16.8696461, 9.953705, 25.3788586, 141.070892)]
+ [InlineData(9.805839, 55.69225, -36.6074753, 9.80584049, 35.3214073, 314.4875)]
+ [InlineData(8.86916, -34.4068336, -42.2136269, 8.869162, 32.1432457, 227.960419)]
+
+ public void Convert_Lab_to_Lchuv(float l, float a, float b, float l2, float c, float h)
+ {
+ // Arrange
+ var input = new CieLab(l, a, b);
+ var expected = new CieLchuv(l2, c, h);
+
+ Span inputSpan = new CieLab[5];
+ inputSpan.Fill(input);
+
+ Span actualSpan = new CieLchuv[5];
+
+ // Act
+ var actual = Converter.ToCieLchuv(input);
+ Converter.Convert(inputSpan, actualSpan, actualSpan.Length);
+
+ // Assert
+ Assert.Equal(expected, actual, ColorSpaceComparer);
+
+ for (int i = 0; i < actualSpan.Length; i++)
+ {
+ Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs b/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs
index af9b8c5b3..8c1d930ff 100644
--- a/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/Conversion/ColorConverterAdaptTest.cs
@@ -61,7 +61,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Conversion
[Theory]
[InlineData(0, 0, 0, 0, 0, 0)]
[InlineData(22, 33, 1, 22.269869, 32.841164, 1.633926)]
- public void Adapt_Lab_D50_To_D65(float l1, float a1, float b1, float l2, float a2, float b2)
+ public void Adapt_Lab_D65_To_D50(float l1, float a1, float b1, float l2, float a2, float b2)
{
// Arrange
var input = new CieLab(l1, a1, b1, Illuminants.D65);
@@ -97,7 +97,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Conversion
[Theory]
[InlineData(0, 0, 0, 0, 0, 0)]
[InlineData(0.5, 0.5, 0.5, 0.507233, 0.500000, 0.378943)]
- public void Adapt_CieXyz_D65_To_D50_XyzScaling(float x1, float y1, float z1, float x2, float y2, float z2)
+ public void Adapt_Xyz_D65_To_D50_XyzScaling(float x1, float y1, float z1, float x2, float y2, float z2)
{
// Arrange
var input = new CieXyz(x1, y1, z1);
@@ -119,22 +119,61 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Conversion
[Theory]
[InlineData(0, 0, 0, 0, 0, 0)]
- [InlineData(0.5, 0.5, 0.5, 0.507233, 0.500000, 0.378943)]
- public void Adapt_Xyz_D65_To_D50_XyzScaling(float x1, float y1, float z1, float x2, float y2, float z2)
+ [InlineData(22, 33, 1, 22.1090755, 32.2102661, 1.153463)]
+ public void Adapt_HunterLab_D65_To_D50(float l1, float a1, float b1, float l2, float a2, float b2)
{
// Arrange
- var input = new CieXyz(x1, y1, z1);
- var expected = new CieXyz(x2, y2, z2);
+ var input = new HunterLab(l1, a1, b1, Illuminants.D65);
+ var expected = new HunterLab(l2, a2, b2);
+ var options = new ColorSpaceConverterOptions { TargetLabWhitePoint = Illuminants.D50 };
+ var converter = new ColorSpaceConverter(options);
+
+ // Action
+ HunterLab actual = converter.Adapt(input);
+
+ // Assert
+ Assert.Equal(expected, actual, ColorSpaceComparer);
+ }
+
+ [Theory]
+ [InlineData(0, 0, 0, 0, 0, 0)]
+ [InlineData(22, 33, 1, 22, 33, 0.9999999)]
+ public void Adapt_CieLchuv_D65_To_D50_XyzScaling(float l1, float c1, float h1, float l2, float c2, float h2)
+ {
+ // Arrange
+ var input = new CieLchuv(l1, c1, h1, Illuminants.D65);
+ var expected = new CieLchuv(l2, c2, h2);
var options = new ColorSpaceConverterOptions
{
ChromaticAdaptation = new VonKriesChromaticAdaptation(LmsAdaptationMatrix.XyzScaling),
- WhitePoint = Illuminants.D50
+ TargetLabWhitePoint = Illuminants.D50
};
+ var converter = new ColorSpaceConverter(options);
+ // Action
+ CieLchuv actual = converter.Adapt(input);
+
+ // Assert
+ Assert.Equal(expected, actual, ColorSpaceComparer);
+ }
+
+ [Theory]
+ [InlineData(0, 0, 0, 0, 0, 0)]
+ [InlineData(22, 33, 1, 22, 33, 0.9999999)]
+ public void Adapt_CieLch_D65_To_D50_XyzScaling(float l1, float c1, float h1, float l2, float c2, float h2)
+ {
+ // Arrange
+ var input = new CieLch(l1, c1, h1, Illuminants.D65);
+ var expected = new CieLch(l2, c2, h2);
+ var options = new ColorSpaceConverterOptions
+ {
+ ChromaticAdaptation = new VonKriesChromaticAdaptation(LmsAdaptationMatrix.XyzScaling),
+ TargetLabWhitePoint = Illuminants.D50
+ };
var converter = new ColorSpaceConverter(options);
// Action
- CieXyz actual = converter.Adapt(input, Illuminants.D65);
+ CieLch actual = converter.Adapt(input);
// Assert
Assert.Equal(expected, actual, ColorSpaceComparer);
diff --git a/tests/ImageSharp.Tests/Colorspaces/HslTests.cs b/tests/ImageSharp.Tests/Colorspaces/HslTests.cs
index edd92536b..60cfa9761 100644
--- a/tests/ImageSharp.Tests/Colorspaces/HslTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/HslTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(Hsl);
var y = new Hsl(Vector3.One);
+
+ Assert.True(default(Hsl) == default(Hsl));
+ Assert.False(default(Hsl) != default(Hsl));
Assert.Equal(default(Hsl), default(Hsl));
Assert.Equal(new Hsl(1, 0, 1), new Hsl(1, 0, 1));
Assert.Equal(new Hsl(Vector3.One), new Hsl(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs b/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs
index 5ccbf5391..d1d1d15c8 100644
--- a/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/HsvTests.cs
@@ -30,10 +30,15 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{
var x = default(Hsv);
var y = new Hsv(Vector3.One);
+
+ Assert.True(default(Hsv) == default(Hsv));
+ Assert.False(default(Hsv) != default(Hsv));
Assert.Equal(default(Hsv), default(Hsv));
Assert.Equal(new Hsv(1, 0, 1), new Hsv(1, 0, 1));
Assert.Equal(new Hsv(Vector3.One), new Hsv(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs b/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs
index b62fa4088..95261e1d9 100644
--- a/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/HunterLabTests.cs
@@ -38,6 +38,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Assert.Equal(new HunterLab(1, 0, 1), new HunterLab(1, 0, 1));
Assert.Equal(new HunterLab(Vector3.One), new HunterLab(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs b/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs
index e352a0920..ef42e68bc 100644
--- a/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/LinearRgbTests.cs
@@ -37,6 +37,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Assert.Equal(new LinearRgb(1, 0, 1), new LinearRgb(1, 0, 1));
Assert.Equal(new LinearRgb(Vector3.One), new LinearRgb(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs b/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs
index dfd07b031..1b0939dc5 100644
--- a/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/LmsTests.cs
@@ -38,6 +38,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Assert.Equal(new Lms(1, 0, 1), new Lms(1, 0, 1));
Assert.Equal(new Lms(Vector3.One), new Lms(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs b/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs
index 99fb3cf1a..7987fbe9f 100644
--- a/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/RgbTests.cs
@@ -38,6 +38,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Assert.Equal(new Rgb(1, 0, 1), new Rgb(1, 0, 1));
Assert.Equal(new Rgb(Vector3.One), new Rgb(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
[Fact]
diff --git a/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs b/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs
index 44b02f165..5249b709b 100644
--- a/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/StringRepresentationTests.cs
@@ -42,6 +42,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
{ new Hsl(one), "Hsl(1, 1, 1)" },
{ new Hsv(one), "Hsv(1, 1, 1)" },
{ new YCbCr(one), "YCbCr(1, 1, 1)" },
+ { new CieXyChromaticityCoordinates(1, 1), "CieXyChromaticityCoordinates(1, 1)"},
{ new CieLab(random), "CieLab(42.4, 94.5, 83.4)" },
{ new CieLch(random), "CieLch(42.4, 94.5, 83.4)" },
diff --git a/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs b/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs
index ebf2ae08d..f3e6f88f4 100644
--- a/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs
+++ b/tests/ImageSharp.Tests/Colorspaces/YCbCrTests.cs
@@ -37,6 +37,8 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces
Assert.Equal(new YCbCr(1, 0, 1), new YCbCr(1, 0, 1));
Assert.Equal(new YCbCr(Vector3.One), new YCbCr(Vector3.One));
Assert.False(x.Equals(y));
+ Assert.False(x.Equals((object)y));
+ Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
}
}
}