Browse Source

Fix LUT entry calculator for XYZ PCS with non-identity matrix

pull/1567/head
Wacton 1 year ago
parent
commit
f21c0c2752
  1. 2
      src/ImageSharp/ColorProfiles/Icc/Calculators/LutEntryCalculator.cs
  2. 4
      tests/ImageSharp.Tests/ColorProfiles/Icc/Calculators/LutEntryCalculatorTests.cs
  3. 8
      tests/ImageSharp.Tests/TestDataIcc/Conversion/IccConversionDataLutEntry.cs

2
src/ImageSharp/ColorProfiles/Icc/Calculators/LutEntryCalculator.cs

@ -37,7 +37,7 @@ internal class LutEntryCalculator : IVector4Calculator
{
if (this.doTransform)
{
value = Vector4.Transform(value, this.matrix);
value = Vector4.Transform(value, Matrix4x4.Transpose(this.matrix));
}
value = CalculateLut(this.inputCurve, value);

4
tests/ImageSharp.Tests/ColorProfiles/Icc/Calculators/LutEntryCalculatorTests.cs

@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.Tests.ColorProfiles.Icc.Calculators
[Trait("Color", "Conversion")]
public class LutEntryCalculatorTests
{
[Theory(Skip = "Results do not match not expected.")]
[Theory]
[MemberData(nameof(IccConversionDataLutEntry.Lut8ConversionTestData), MemberType = typeof(IccConversionDataLutEntry))]
internal void LutEntryCalculator_WithLut8_ReturnsResult(IccLut8TagDataEntry lut, Vector4 input, Vector4 expected)
{
@ -25,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.ColorProfiles.Icc.Calculators
VectorAssert.Equal(expected, result, 4);
}
[Theory(Skip = "Results do not match not expected.")]
[Theory]
[MemberData(nameof(IccConversionDataLutEntry.Lut16ConversionTestData), MemberType = typeof(IccConversionDataLutEntry))]
internal void LutEntryCalculator_WithLut16_ReturnsResult(IccLut16TagDataEntry lut, Vector4 input, Vector4 expected)
{

8
tests/ImageSharp.Tests/TestDataIcc/Conversion/IccConversionDataLutEntry.cs

@ -49,13 +49,13 @@ public class IccConversionDataLutEntry
public static object[][] Lut8ConversionTestData =
{
new object[] { Lut8, new Vector4(0.2f, 0.3f, 0, 0), new Vector4(0.339762866f, 0, 0, 0) },
new object[] { Lut8Matrix, new Vector4(0.21f, 0.31f, 0.41f, 0), new Vector4(0.431305826f, 0, 0, 0) },
new object[] { Lut8, new Vector4(0.2f, 0.3f, 0, 0), new Vector4(0.4578933760499877f, 0, 0, 0) },
new object[] { Lut8Matrix, new Vector4(0.21f, 0.31f, 0.41f, 0), new Vector4(0.40099657491875312f, 0, 0, 0) },
};
public static object[][] Lut16ConversionTestData =
{
new object[] { Lut16, new Vector4(0.2f, 0.3f, 0, 0), new Vector4(0.245625019f, 0, 0, 0) },
new object[] { Lut16Matrix, new Vector4(0.21f, 0.31f, 0.41f, 0), new Vector4(0.336980581f, 0, 0, 0) },
new object[] { Lut16, new Vector4(0.2f, 0.3f, 0, 0), new Vector4(0.3543750030529918f, 0, 0, 0) },
new object[] { Lut16Matrix, new Vector4(0.21f, 0.31f, 0.41f, 0), new Vector4(0.29739562389689594f, 0, 0, 0) },
};
}

Loading…
Cancel
Save