diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ColorTrcCalculator.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ColorTrcCalculator.cs index eb6d06b5d0..ef557cc862 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ColorTrcCalculator.cs +++ b/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); } } diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/CurveCalculator.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/CurveCalculator.cs index 48213a486d..da40d3912c 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/CurveCalculator.cs +++ b/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"), + }; } diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/GrayTrcCalculator.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/GrayTrcCalculator.cs index 1c68668d20..4df47950ec 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/GrayTrcCalculator.cs +++ b/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); } diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutABCalculator.CalculationType.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutABCalculator.CalculationType.cs index 7473fd7a0f..a09150c9b6 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutABCalculator.CalculationType.cs +++ b/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; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutEntryCalculator.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutEntryCalculator.cs index dd3e62a763..643090c9d8 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/LutEntryCalculator.cs +++ b/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(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; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ParametricCurveCalculator.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ParametricCurveCalculator.cs index 9312326830..b38c6ecdce 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/ParametricCurveCalculator.cs +++ b/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; } } diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/TrcCalculator.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/TrcCalculator.cs index 83a6f0ecd9..a064610380 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/Calculators/TrcCalculator.cs +++ b/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(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; diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterBase.Checks.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterBase.Checks.cs index 344efddad2..59ff612bd0 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterBase.Checks.cs +++ b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterBase.Checks.cs @@ -10,24 +10,15 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion.Icc; /// 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(IccProfile profile, IccProfileTag tag) where T : IccTagDataEntry diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterbase.Conversions.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterbase.Conversions.cs index f40361696c..9d2390ac79 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccConverterbase.Conversions.cs +++ b/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 /// The profile to use for the conversion /// True if the conversion is to the Profile Connection Space /// The wanted rendering intent. Can be ignored if not available + /// Invalid conversion method. 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) { diff --git a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccProfileConverter.cs b/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccProfileConverter.cs index ef7be7d1ab..6325c5ce19 100644 --- a/src/ImageSharp/ColorSpaces/Conversion/Implementation/Icc/IccProfileConverter.cs +++ b/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; + +/// +/// Allows the copnversion between ICC profiles. +/// internal static class IccProfileConverter { + /// + /// Performs a conversion of the image pixels based on the input and output ICC profiles. + /// + /// The type of pixel. + /// The image to convert. + /// The input ICC profile. + /// The output ICC profile. public static void Convert(Image image, IccProfile inputIccProfile, IccProfile outputIccProfile) where TPixel : unmanaged, IPixel { + // 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; } } diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/CurveCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/CurveCalculatorTests.cs index 384f68afdf..65d41f2df6 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/CurveCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutABCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutABCalculatorTests.cs index 712d096cbb..4b0ec9af1a 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutABCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutCalculatorTests.cs index 3caad03a6c..2c6317d605 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutEntryCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutEntryCalculatorTests.cs index 8b374dedb6..e275b66634 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/LutEntryCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/MatrixCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/MatrixCalculatorTests.cs index 925b00ef4f..1770b2e9fb 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/MatrixCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/ParametricCurveCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/ParametricCurveCalculatorTests.cs index 89d0e1da12..c2387613c9 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/ParametricCurveCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/TrcCalculatorTests.cs b/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/TrcCalculatorTests.cs index c7b198b8dc..4029cc326d 100644 --- a/tests/ImageSharp.Tests/Colorspaces/Icc/Calculators/TrcCalculatorTests.cs +++ b/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); diff --git a/tests/ImageSharp.Tests/TestDataIcc/Conversion/IccConversionDataTrc.cs b/tests/ImageSharp.Tests/TestDataIcc/Conversion/IccConversionDataTrc.cs index 1536b2f957..6cd99367a9 100644 --- a/tests/ImageSharp.Tests/TestDataIcc/Conversion/IccConversionDataTrc.cs +++ b/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 },