Browse Source

Cleanup code style

pull/1567/head
James Jackson-South 3 years ago
parent
commit
8de137ec8a
  1. 12
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ColorTrcCalculator.cs
  2. 27
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/CurveCalculator.cs
  3. 11
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/GrayTrcCalculator.cs
  4. 2
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutABCalculator.CalculationType.cs
  5. 14
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutEntryCalculator.cs
  6. 42
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ParametricCurveCalculator.cs
  7. 24
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/TrcCalculator.cs
  8. 27
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterBase.Checks.cs
  9. 110
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterbase.Conversions.cs
  10. 18
      src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccProfileConverter.cs
  11. 3
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/CurveCalculatorTests.cs
  12. 5
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutABCalculatorTests.cs
  13. 3
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutCalculatorTests.cs
  14. 5
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutEntryCalculatorTests.cs
  15. 3
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/MatrixCalculatorTests.cs
  16. 3
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/ParametricCurveCalculatorTests.cs
  17. 3
      tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/TrcCalculatorTests.cs
  18. 8
      tests/ImageSharp.Tests/TestDataIcc/Conversion/IccConversionDataTrc.cs

12
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ColorTrcCalculator.cs

@ -9,9 +9,9 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
internal class ColorTrcCalculator : IVector4Calculator
{
private TrcCalculator curveCalculator;
private readonly TrcCalculator curveCalculator;
private Matrix4x4 matrix;
private bool toPcs;
private readonly bool toPcs;
public ColorTrcCalculator(
IccXyzTagDataEntry redMatrixColumn,
@ -44,10 +44,8 @@ internal class ColorTrcCalculator : IVector4Calculator
value = this.curveCalculator.Calculate(value);
return Vector4.Transform(value, this.matrix);
}
else
{
value = Vector4.Transform(value, this.matrix);
return this.curveCalculator.Calculate(value);
}
value = Vector4.Transform(value, this.matrix);
return this.curveCalculator.Calculate(value);
}
}

27
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/CurveCalculator.cs

@ -7,9 +7,9 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
internal partial class CurveCalculator : ISingleCalculator
{
private LutCalculator lutCalculator;
private float gamma;
private CalculationType type;
private readonly LutCalculator lutCalculator;
private readonly float gamma;
private readonly CalculationType type;
public CurveCalculator(IccCurveTagDataEntry entry, bool inverted)
{
@ -35,20 +35,11 @@ internal partial class CurveCalculator : ISingleCalculator
}
public float Calculate(float value)
{
switch (this.type)
=> this.type switch
{
case CalculationType.Identity:
return value;
case CalculationType.Gamma:
return MathF.Pow(value, this.gamma);
case CalculationType.Lut:
return this.lutCalculator.Calculate(value);
default:
throw new InvalidOperationException("Invalid calculation type");
}
}
CalculationType.Identity => value,
CalculationType.Gamma => MathF.Pow(value, this.gamma), // TODO: This could be optimized using a LUT. See SrgbCompanding
CalculationType.Lut => this.lutCalculator.Calculate(value),
_ => throw new InvalidOperationException("Invalid calculation type"),
};
}

11
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/GrayTrcCalculator.cs

@ -9,16 +9,11 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
internal class GrayTrcCalculator : IVector4Calculator
{
private TrcCalculator calculator;
private readonly TrcCalculator calculator;
public GrayTrcCalculator(IccTagDataEntry grayTrc, bool toPcs)
{
this.calculator = new TrcCalculator(new IccTagDataEntry[] { grayTrc }, !toPcs);
}
=> this.calculator = new TrcCalculator(new IccTagDataEntry[] { grayTrc }, !toPcs);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 Calculate(Vector4 value)
{
return this.calculator.Calculate(value);
}
public Vector4 Calculate(Vector4 value) => this.calculator.Calculate(value);
}

2
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutABCalculator.CalculationType.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors.
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;

14
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutEntryCalculator.cs

@ -2,6 +2,7 @@
// Licensed under the Six Labors Split License.
using System.Numerics;
using System.Runtime.CompilerServices;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
@ -26,6 +27,7 @@ internal class LutEntryCalculator : IVector4Calculator
this.Init(lut.InputValues, lut.OutputValues, lut.ClutValues, lut.Matrix);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 Calculate(Vector4 value)
{
if (this.doTransform)
@ -33,19 +35,19 @@ internal class LutEntryCalculator : IVector4Calculator
value = Vector4.Transform(value, this.matrix);
}
value = this.CalculateLut(this.inputCurve, value);
value = CalculateLut(this.inputCurve, value);
value = this.clutCalculator.Calculate(value);
return this.CalculateLut(this.outputCurve, value);
return CalculateLut(this.outputCurve, value);
}
private unsafe Vector4 CalculateLut(LutCalculator[] lut, Vector4 value)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static unsafe Vector4 CalculateLut(LutCalculator[] lut, Vector4 value)
{
value = Vector4.Clamp(value, Vector4.Zero, Vector4.One);
float* valuePointer = (float*)&value;
ref float f = ref Unsafe.As<Vector4, float>(ref value);
for (int i = 0; i < lut.Length; i++)
{
valuePointer[i] = lut[i].Calculate(valuePointer[i]);
Unsafe.Add(ref f, i) = lut[i].Calculate(Unsafe.Add(ref f, i));
}
return value;

42
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ParametricCurveCalculator.cs

@ -50,10 +50,8 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return MathF.Pow((this.curve.A * value) + this.curve.B, this.curve.G);
}
else
{
return 0;
}
return 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -63,10 +61,8 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return MathF.Pow((this.curve.A * value) + this.curve.B, this.curve.G) + this.curve.C;
}
else
{
return this.curve.C;
}
return this.curve.C;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -76,10 +72,8 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return MathF.Pow((this.curve.A * value) + this.curve.B, this.curve.G);
}
else
{
return this.curve.C * value;
}
return this.curve.C * value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -89,10 +83,8 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return MathF.Pow((this.curve.A * value) + this.curve.B, this.curve.G) + this.curve.E;
}
else
{
return (this.curve.C * value) + this.curve.F;
}
return (this.curve.C * value) + this.curve.F;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -110,10 +102,8 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return (MathF.Pow(value - this.curve.C, 1 / this.curve.G) - this.curve.B) / this.curve.A;
}
else
{
return -this.curve.B / this.curve.A;
}
return -this.curve.B / this.curve.A;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -123,10 +113,8 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return (MathF.Pow(value, 1 / this.curve.G) - this.curve.B) / this.curve.A;
}
else
{
return value / this.curve.C;
}
return value / this.curve.C;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -136,9 +124,7 @@ internal class ParametricCurveCalculator : ISingleCalculator
{
return (MathF.Pow(value - this.curve.E, 1 / this.curve.G) - this.curve.B) / this.curve.A;
}
else
{
return (value - this.curve.F) / this.curve.C;
}
return (value - this.curve.F) / this.curve.C;
}
}

24
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/TrcCalculator.cs

@ -2,13 +2,14 @@
// Licensed under the Six Labors Split License.
using System.Numerics;
using System.Runtime.CompilerServices;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
internal class TrcCalculator : IVector4Calculator
{
private ISingleCalculator[] calculators;
private readonly ISingleCalculator[] calculators;
public TrcCalculator(IccTagDataEntry[] entries, bool inverted)
{
@ -17,28 +18,21 @@ internal class TrcCalculator : IVector4Calculator
this.calculators = new ISingleCalculator[entries.Length];
for (int i = 0; i < entries.Length; i++)
{
switch (entries[i])
this.calculators[i] = entries[i] switch
{
case IccCurveTagDataEntry curve:
this.calculators[i] = new CurveCalculator(curve, inverted);
break;
case IccParametricCurveTagDataEntry parametricCurve:
this.calculators[i] = new ParametricCurveCalculator(parametricCurve, inverted);
break;
default:
throw new InvalidIccProfileException("Invalid Entry.");
}
IccCurveTagDataEntry curve => new CurveCalculator(curve, inverted),
IccParametricCurveTagDataEntry parametricCurve => new ParametricCurveCalculator(parametricCurve, inverted),
_ => throw new InvalidIccProfileException("Invalid Entry."),
};
}
}
public unsafe Vector4 Calculate(Vector4 value)
{
float* valuePointer = (float*)&value;
ref float f = ref Unsafe.As<Vector4, float>(ref value);
for (int i = 0; i < this.calculators.Length; i++)
{
valuePointer[i] = this.calculators[i].Calculate(valuePointer[i]);
Unsafe.Add(ref f, i) = this.calculators[i].Calculate(Unsafe.Add(ref f, i));
}
return value;

27
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterBase.Checks.cs

@ -10,24 +10,15 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
/// </summary>
internal abstract partial class IccConverterBase
{
private static ConversionMethod GetConversionMethod(IccProfile profile, IccRenderingIntent renderingIntent)
private static ConversionMethod GetConversionMethod(IccProfile profile, IccRenderingIntent renderingIntent) => profile.Header.Class switch
{
switch (profile.Header.Class)
{
case IccProfileClass.InputDevice:
case IccProfileClass.DisplayDevice:
case IccProfileClass.OutputDevice:
case IccProfileClass.ColorSpace:
return CheckMethod1(profile, renderingIntent);
case IccProfileClass.DeviceLink:
case IccProfileClass.Abstract:
return CheckMethod2(profile);
default:
return ConversionMethod.Invalid;
}
}
IccProfileClass.InputDevice or
IccProfileClass.DisplayDevice or
IccProfileClass.OutputDevice or
IccProfileClass.ColorSpace => CheckMethod1(profile, renderingIntent),
IccProfileClass.DeviceLink or IccProfileClass.Abstract => CheckMethod2(profile),
_ => ConversionMethod.Invalid,
};
private static ConversionMethod CheckMethod1(IccProfile profile, IccRenderingIntent renderingIntent)
{
@ -155,7 +146,7 @@ internal abstract partial class IccConverterBase
=> profile.Entries.Any(t => t.TagSignature == tag);
private static IccTagDataEntry GetTag(IccProfile profile, IccProfileTag tag)
=> profile.Entries.FirstOrDefault(t => t.TagSignature == tag);
=> Array.Find(profile.Entries, t => t.TagSignature == tag);
private static T GetTag<T>(IccProfile profile, IccProfileTag tag)
where T : IccTagDataEntry

110
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterbase.Conversions.cs

@ -1,8 +1,6 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using System;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
@ -20,85 +18,45 @@ internal abstract partial class IccConverterBase
/// <param name="profile">The profile to use for the conversion</param>
/// <param name="toPcs">True if the conversion is to the Profile Connection Space</param>
/// <param name="renderingIntent">The wanted rendering intent. Can be ignored if not available</param>
/// <exception cref="InvalidIccProfileException">Invalid conversion method.</exception>
protected void Init(IccProfile profile, bool toPcs, IccRenderingIntent renderingIntent)
{
switch (GetConversionMethod(profile, renderingIntent))
=> this.calculator = GetConversionMethod(profile, renderingIntent) switch
{
case ConversionMethod.D0:
this.calculator = toPcs ?
InitD(profile, IccProfileTag.DToB0) :
InitD(profile, IccProfileTag.BToD0);
break;
case ConversionMethod.D1:
this.calculator = toPcs ?
InitD(profile, IccProfileTag.DToB1) :
InitD(profile, IccProfileTag.BToD1);
break;
case ConversionMethod.D2:
this.calculator = toPcs ?
InitD(profile, IccProfileTag.DToB2) :
InitD(profile, IccProfileTag.BToD2);
break;
case ConversionMethod.D3:
this.calculator = toPcs ?
InitD(profile, IccProfileTag.DToB3) :
InitD(profile, IccProfileTag.BToD3);
break;
case ConversionMethod.A0:
this.calculator = toPcs ?
InitA(profile, IccProfileTag.AToB0) :
InitA(profile, IccProfileTag.BToA0);
break;
case ConversionMethod.A1:
this.calculator = toPcs ?
InitA(profile, IccProfileTag.AToB1) :
InitA(profile, IccProfileTag.BToA1);
break;
case ConversionMethod.A2:
this.calculator = toPcs ?
InitA(profile, IccProfileTag.AToB2) :
InitA(profile, IccProfileTag.BToA2);
break;
case ConversionMethod.ColorTrc:
this.calculator = InitColorTrc(profile, toPcs);
break;
case ConversionMethod.GrayTrc:
this.calculator = InitGrayTrc(profile, toPcs);
break;
case ConversionMethod.Invalid:
default:
throw new InvalidIccProfileException("Invalid conversion method.");
}
}
ConversionMethod.D0 => toPcs ?
InitD(profile, IccProfileTag.DToB0) :
InitD(profile, IccProfileTag.BToD0),
ConversionMethod.D1 => toPcs ?
InitD(profile, IccProfileTag.DToB1) :
InitD(profile, IccProfileTag.BToD1),
ConversionMethod.D2 => toPcs ?
InitD(profile, IccProfileTag.DToB2) :
InitD(profile, IccProfileTag.BToD2),
ConversionMethod.D3 => toPcs ?
InitD(profile, IccProfileTag.DToB3) :
InitD(profile, IccProfileTag.BToD3),
ConversionMethod.A0 => toPcs ?
InitA(profile, IccProfileTag.AToB0) :
InitA(profile, IccProfileTag.BToA0),
ConversionMethod.A1 => toPcs ?
InitA(profile, IccProfileTag.AToB1) :
InitA(profile, IccProfileTag.BToA1),
ConversionMethod.A2 => toPcs ?
InitA(profile, IccProfileTag.AToB2) :
InitA(profile, IccProfileTag.BToA2),
ConversionMethod.ColorTrc => InitColorTrc(profile, toPcs),
ConversionMethod.GrayTrc => InitGrayTrc(profile, toPcs),
_ => throw new InvalidIccProfileException("Invalid conversion method."),
};
private static IVector4Calculator InitA(IccProfile profile, IccProfileTag tag)
{
switch (GetTag(profile, tag))
=> GetTag(profile, tag) switch
{
case IccLut8TagDataEntry lut8:
return new LutEntryCalculator(lut8);
case IccLut16TagDataEntry lut16:
return new LutEntryCalculator(lut16);
case IccLutAToBTagDataEntry lutAtoB:
return new LutABCalculator(lutAtoB);
case IccLutBToATagDataEntry lutBtoA:
return new LutABCalculator(lutBtoA);
default:
// TODO: This is where we likely return a matrix calculator.
throw new InvalidIccProfileException("Invalid entry.");
}
}
IccLut8TagDataEntry lut8 => new LutEntryCalculator(lut8),
IccLut16TagDataEntry lut16 => new LutEntryCalculator(lut16),
IccLutAToBTagDataEntry lutAtoB => new LutABCalculator(lutAtoB),
IccLutBToATagDataEntry lutBtoA => new LutABCalculator(lutBtoA),
_ => throw new InvalidIccProfileException("Invalid entry."),
};
private static IVector4Calculator InitD(IccProfile profile, IccProfileTag tag)
{

18
src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccProfileConverter.cs

@ -10,11 +10,28 @@ using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.PixelFormats;
namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Implementation.Icc;
/// <summary>
/// Allows the copnversion between ICC profiles.
/// </summary>
internal static class IccProfileConverter
{
/// <summary>
/// Performs a conversion of the image pixels based on the input and output ICC profiles.
/// </summary>
/// <typeparam name="TPixel">The type of pixel.</typeparam>
/// <param name="image">The image to convert.</param>
/// <param name="inputIccProfile">The input ICC profile.</param>
/// <param name="outputIccProfile">The output ICC profile. </param>
public static void Convert<TPixel>(Image<TPixel> image, IccProfile inputIccProfile, IccProfile outputIccProfile)
where TPixel : unmanaged, IPixel<TPixel>
{
// TODO: Is this the correct property?
if (inputIccProfile.Header.Id.Equals(outputIccProfile.Header.Id))
{
return;
}
IccDataToPcsConverter converterDataToPcs = new(inputIccProfile);
IccPcsToDataConverter converterPcsToData = new(outputIccProfile);
Configuration configuration = image.GetConfiguration();
@ -38,6 +55,7 @@ internal static class IccProfileConverter
}
});
// TODO: Do not preserve the profile if we are converting to sRGB.
image.Metadata.IccProfile = outputIccProfile;
}
}

3
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/CurveCalculatorTests.cs

@ -4,7 +4,6 @@
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -18,7 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataTrc.CurveConversionTestData), MemberType = typeof(IccConversionDataTrc))]
internal void CurveCalculator_WithCurveEntry_ReturnsResult(IccCurveTagDataEntry curve, bool inverted, float input, float expected)
{
var calculator = new CurveCalculator(curve, inverted);
CurveCalculator calculator = new(curve, inverted);
float result = calculator.Calculate(input);

5
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutABCalculatorTests.cs

@ -5,7 +5,6 @@ using System.Numerics;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -19,7 +18,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataLutAB.LutAToBConversionTestData), MemberType = typeof(IccConversionDataLutAB))]
internal void LutABCalculator_WithLutAToB_ReturnsResult(IccLutAToBTagDataEntry lut, Vector4 input, Vector4 expected)
{
var calculator = new LutABCalculator(lut);
LutABCalculator calculator = new(lut);
Vector4 result = calculator.Calculate(input);
@ -30,7 +29,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataLutAB.LutBToAConversionTestData), MemberType = typeof(IccConversionDataLutAB))]
internal void LutABCalculator_WithLutBToA_ReturnsResult(IccLutBToATagDataEntry lut, Vector4 input, Vector4 expected)
{
var calculator = new LutABCalculator(lut);
LutABCalculator calculator = new(lut);
Vector4 result = calculator.Calculate(input);

3
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutCalculatorTests.cs

@ -3,7 +3,6 @@
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -17,7 +16,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataLut.LutConversionTestData), MemberType = typeof(IccConversionDataLut))]
internal void LutCalculator_WithLut_ReturnsResult(float[] lut, bool inverted, float input, float expected)
{
var calculator = new LutCalculator(lut, inverted);
LutCalculator calculator = new(lut, inverted);
float result = calculator.Calculate(input);

5
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutEntryCalculatorTests.cs

@ -5,7 +5,6 @@ using System.Numerics;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -19,7 +18,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataLutEntry.Lut8ConversionTestData), MemberType = typeof(IccConversionDataLutEntry))]
internal void LutEntryCalculator_WithLut8_ReturnsResult(IccLut8TagDataEntry lut, Vector4 input, Vector4 expected)
{
var calculator = new LutEntryCalculator(lut);
LutEntryCalculator calculator = new(lut);
Vector4 result = calculator.Calculate(input);
@ -30,7 +29,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataLutEntry.Lut16ConversionTestData), MemberType = typeof(IccConversionDataLutEntry))]
internal void LutEntryCalculator_WithLut16_ReturnsResult(IccLut16TagDataEntry lut, Vector4 input, Vector4 expected)
{
var calculator = new LutEntryCalculator(lut);
LutEntryCalculator calculator = new(lut);
Vector4 result = calculator.Calculate(input);

3
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/MatrixCalculatorTests.cs

@ -4,7 +4,6 @@
using System.Numerics;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -18,7 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataMatrix.MatrixConversionTestData), MemberType = typeof(IccConversionDataMatrix))]
internal void MatrixCalculator_WithMatrix_ReturnsResult(Matrix4x4 matrix2D, Vector3 matrix1D, Vector4 input, Vector4 expected)
{
var calculator = new MatrixCalculator(matrix2D, matrix1D);
MatrixCalculator calculator = new(matrix2D, matrix1D);
Vector4 result = calculator.Calculate(input);

3
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/ParametricCurveCalculatorTests.cs

@ -4,7 +4,6 @@
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -18,7 +17,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataTrc.ParametricCurveConversionTestData), MemberType = typeof(IccConversionDataTrc))]
internal void ParametricCurveCalculator_WithCurveEntry_ReturnsResult(IccParametricCurveTagDataEntry curve, bool inverted, float input, float expected)
{
var calculator = new ParametricCurveCalculator(curve, inverted);
ParametricCurveCalculator calculator = new(curve, inverted);
float result = calculator.Calculate(input);

3
tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/TrcCalculatorTests.cs

@ -5,7 +5,6 @@ using System.Numerics;
using SixLabors.ImageSharp.ColorSpaces.Conversion.Icc;
using SixLabors.ImageSharp.Metadata.Profiles.Icc;
using SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
using Xunit;
namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
{
@ -19,7 +18,7 @@ namespace SixLabors.ImageSharp.Tests.Colorspaces.Icc.Calculators
[MemberData(nameof(IccConversionDataTrc.TrcArrayConversionTestData), MemberType = typeof(IccConversionDataTrc))]
internal void TrcCalculator_WithCurvesArray_ReturnsResult(IccTagDataEntry[] entries, bool inverted, Vector4 input, Vector4 expected)
{
var calculator = new TrcCalculator(entries, inverted);
TrcCalculator calculator = new(entries, inverted);
Vector4 result = calculator.Calculate(input);

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

@ -6,7 +6,7 @@ using SixLabors.ImageSharp.Metadata.Profiles.Icc;
namespace SixLabors.ImageSharp.Tests.TestDataIcc.Conversion;
public class IccConversionDataTrc
public static class IccConversionDataTrc
{
internal static IccCurveTagDataEntry IdentityCurve = new();
internal static IccCurveTagDataEntry Gamma2Curve = new(2);
@ -18,7 +18,7 @@ public class IccConversionDataTrc
internal static IccParametricCurveTagDataEntry ParamCurve4 = new(new IccParametricCurve(2.4f, 1 / 1.055f, 0.055f / 1.055f, 1 / 12.92f, 0.04045f));
internal static IccParametricCurveTagDataEntry ParamCurve5 = new(new IccParametricCurve(2.2f, 0.7f, 0.2f, 0.3f, 0.1f, 0.5f, 0.2f));
public static object[][] TrcArrayConversionTestData =
public static object[][] TrcArrayConversionTestData { get; } =
{
new object[]
{
@ -36,7 +36,7 @@ public class IccConversionDataTrc
},
};
public static object[][] CurveConversionTestData =
public static object[][] CurveConversionTestData { get; } =
{
new object[] { IdentityCurve, false, 2, 2 },
new object[] { Gamma2Curve, false, 2, 4 },
@ -51,7 +51,7 @@ public class IccConversionDataTrc
new object[] { LutCurve, true, 0.85, 0.75 },
};
public static object[][] ParametricCurveConversionTestData =
public static object[][] ParametricCurveConversionTestData { get; } =
{
new object[] { ParamCurve1, false, 0.5f, 0.217637628f },
new object[] { ParamCurve2, false, 0.6f, 0.133208528f },

Loading…
Cancel
Save