Browse Source

Replace old converter

pull/2739/head
James Jackson-South 2 years ago
parent
commit
fb50f5be71
  1. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieLabCieLab.cs
  2. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieLabCieXyz.cs
  3. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieLabRgb.cs
  4. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieXyzCieLab.cs
  5. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieXyzCieXyz.cs
  6. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieXyzRgb.cs
  7. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsRgbCieLab.cs
  8. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsRgbCieXyz.cs
  9. 4
      src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsRgbRgb.cs
  10. 7
      src/ImageSharp/Formats/Tiff/PhotometricInterpretation/CieLabPlanarTiffColor{TPixel}.cs
  11. 7
      src/ImageSharp/Formats/Tiff/PhotometricInterpretation/CieLabTiffColor{TPixel}.cs
  12. 6
      src/ImageSharp/Formats/Tiff/PhotometricInterpretation/CmykTiffColor{TPixel}.cs
  13. 2
      src/ImageSharp/PixelFormats/PixelConversionModifiers.cs
  14. 7
      src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs
  15. 7
      src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs
  16. 6
      src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs
  17. 1
      tests/ImageSharp.Tests/ColorProfiles/ColorProfileConverterChomaticAdaptationTests.cs
  18. 2
      tests/ImageSharp.Tests/ColorProfiles/HslTests.cs
  19. 1
      tests/ImageSharp.Tests/ColorProfiles/RgbAndCieXyzConversionTest.cs
  20. 59
      tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs
  21. 36
      tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieLabCieLab.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsCieLabCieLab
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, CieLab>
where TTo : struct, IColorProfile<TTo, CieLab>
{
@ -26,7 +26,7 @@ internal static class ColorProfileConverterExtensionsCieLabCieLab
CieLab pcsTo = CieLab.FromProfileConnectingSpace(options, in pcsFromB);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieLabCieXyz.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsCieLabCieXyz
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, CieLab>
where TTo : struct, IColorProfile<TTo, CieXyz>
{
@ -25,7 +25,7 @@ internal static class ColorProfileConverterExtensionsCieLabCieXyz
pcsTo = VonKriesChromaticAdaptation.Transform(in pcsTo, whitePoints, options.AdaptationMatrix);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieLabRgb.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsCieLabRgb
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, CieLab>
where TTo : struct, IColorProfile<TTo, Rgb>
{
@ -26,7 +26,7 @@ internal static class ColorProfileConverterExtensionsCieLabRgb
Rgb pcsTo = Rgb.FromProfileConnectingSpace(options, in pcsFromB);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieXyzCieLab.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsCieXyzCieLab
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, CieXyz>
where TTo : struct, IColorProfile<TTo, CieLab>
{
@ -25,7 +25,7 @@ internal static class ColorProfileConverterExtensionsCieXyzCieLab
CieLab pcsTo = CieLab.FromProfileConnectingSpace(options, in pcsFrom);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieXyzCieXyz.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsCieXyzCieXyz
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, CieXyz>
where TTo : struct, IColorProfile<TTo, CieXyz>
{
@ -22,7 +22,7 @@ internal static class ColorProfileConverterExtensionsCieXyzCieXyz
pcsFrom = VonKriesChromaticAdaptation.Transform(in pcsFrom, whitePoints, options.AdaptationMatrix);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsFrom);
return TTo.FromProfileConnectingSpace(options, in pcsFrom);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsCieXyzRgb.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsCieXyzRgb
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, CieXyz>
where TTo : struct, IColorProfile<TTo, Rgb>
{
@ -25,7 +25,7 @@ internal static class ColorProfileConverterExtensionsCieXyzRgb
Rgb pcsTo = Rgb.FromProfileConnectingSpace(options, in pcsFrom);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsRgbCieLab.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsRgbCieLab
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, Rgb>
where TTo : struct, IColorProfile<TTo, CieLab>
{
@ -26,7 +26,7 @@ internal static class ColorProfileConverterExtensionsRgbCieLab
CieLab pcsTo = CieLab.FromProfileConnectingSpace(options, in pcsFromB);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsRgbCieXyz.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsRgbCieXyz
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, Rgb>
where TTo : struct, IColorProfile<TTo, CieXyz>
{
@ -25,7 +25,7 @@ internal static class ColorProfileConverterExtensionsRgbCieXyz
pcsTo = VonKriesChromaticAdaptation.Transform(in pcsTo, whitePoints, options.AdaptationMatrix);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

4
src/ImageSharp/ColorProfiles/ColorProfileConverterExtensionsRgbRgb.cs

@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.ColorProfiles;
internal static class ColorProfileConverterExtensionsRgbRgb
{
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, TFrom source)
public static TTo Convert<TFrom, TTo>(this ColorProfileConverter converter, in TFrom source)
where TFrom : struct, IColorProfile<TFrom, Rgb>
where TTo : struct, IColorProfile<TTo, Rgb>
{
@ -26,7 +26,7 @@ internal static class ColorProfileConverterExtensionsRgbRgb
Rgb pcsTo = Rgb.FromProfileConnectingSpace(options, in pcsFromB);
// Convert to output from PCS
return TTo.FromProfileConnectingSpace(options, pcsTo);
return TTo.FromProfileConnectingSpace(options, in pcsTo);
}
public static void Convert<TFrom, TTo>(this ColorProfileConverter converter, ReadOnlySpan<TFrom> source, Span<TTo> destination)

7
src/ImageSharp/Formats/Tiff/PhotometricInterpretation/CieLabPlanarTiffColor{TPixel}.cs

@ -2,8 +2,7 @@
// Licensed under the Six Labors Split License.
using System.Buffers;
using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorSpaces.Conversion;
using SixLabors.ImageSharp.ColorProfiles;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats;
@ -16,7 +15,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.PhotometricInterpretation;
internal class CieLabPlanarTiffColor<TPixel> : TiffBasePlanarColorDecoder<TPixel>
where TPixel : unmanaged, IPixel<TPixel>
{
private static readonly ColorSpaceConverter ColorSpaceConverter = new();
private static readonly ColorProfileConverter ColorProfileConverter = new();
private const float Inv255 = 1.0f / 255.0f;
@ -34,7 +33,7 @@ internal class CieLabPlanarTiffColor<TPixel> : TiffBasePlanarColorDecoder<TPixel
for (int x = 0; x < pixelRow.Length; x++)
{
CieLab lab = new((l[offset] & 0xFF) * 100f * Inv255, (sbyte)a[offset], (sbyte)b[offset]);
Rgb rgb = ColorSpaceConverter.ToRgb(lab);
Rgb rgb = ColorProfileConverter.Convert<CieLab, Rgb>(in lab);
pixelRow[x] = TPixel.FromScaledVector4(new(rgb.R, rgb.G, rgb.B, 1.0f));
offset++;

7
src/ImageSharp/Formats/Tiff/PhotometricInterpretation/CieLabTiffColor{TPixel}.cs

@ -1,8 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorSpaces.Conversion;
using SixLabors.ImageSharp.ColorProfiles;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats;
@ -15,7 +14,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.PhotometricInterpretation;
internal class CieLabTiffColor<TPixel> : TiffBaseColorDecoder<TPixel>
where TPixel : unmanaged, IPixel<TPixel>
{
private static readonly ColorSpaceConverter ColorSpaceConverter = new();
private static readonly ColorProfileConverter ColorProfileConverter = new();
private const float Inv255 = 1f / 255f;
/// <inheritdoc/>
@ -30,7 +29,7 @@ internal class CieLabTiffColor<TPixel> : TiffBaseColorDecoder<TPixel>
{
float l = (data[offset] & 0xFF) * 100f * Inv255;
CieLab lab = new(l, (sbyte)data[offset + 1], (sbyte)data[offset + 2]);
Rgb rgb = ColorSpaceConverter.ToRgb(lab);
Rgb rgb = ColorProfileConverter.Convert<CieLab, Rgb>(in lab);
pixelRow[x] = TPixel.FromScaledVector4(new(rgb.R, rgb.G, rgb.B, 1f));
offset += 3;

6
src/ImageSharp/Formats/Tiff/PhotometricInterpretation/CmykTiffColor{TPixel}.cs

@ -1,8 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorSpaces.Conversion;
using SixLabors.ImageSharp.ColorProfiles;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats;
@ -11,6 +10,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.PhotometricInterpretation;
internal class CmykTiffColor<TPixel> : TiffBaseColorDecoder<TPixel>
where TPixel : unmanaged, IPixel<TPixel>
{
private static readonly ColorProfileConverter ColorProfileConverter = new();
private const float Inv255 = 1f / 255f;
/// <inheritdoc/>
@ -23,7 +23,7 @@ internal class CmykTiffColor<TPixel> : TiffBaseColorDecoder<TPixel>
for (int x = 0; x < pixelRow.Length; x++)
{
Cmyk cmyk = new(data[offset] * Inv255, data[offset + 1] * Inv255, data[offset + 2] * Inv255, data[offset + 3] * Inv255);
Rgb rgb = ColorSpaceConverter.ToRgb(in cmyk);
Rgb rgb = ColorProfileConverter.Convert<Cmyk, Rgb>(in cmyk);
pixelRow[x] = TPixel.FromScaledVector4(new(rgb.R, rgb.G, rgb.B, 1.0f));
offset += 4;

2
src/ImageSharp/PixelFormats/PixelConversionModifiers.cs

@ -1,7 +1,7 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.ColorSpaces.Companding;
using SixLabors.ImageSharp.ColorProfiles.Companding;
namespace SixLabors.ImageSharp.PixelFormats;

7
src/ImageSharp/PixelFormats/PixelImplementations/Rgb24.cs

@ -5,6 +5,7 @@ using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using SixLabors.ImageSharp.ColorProfiles;
namespace SixLabors.ImageSharp.PixelFormats;
@ -54,13 +55,13 @@ public partial struct Rgb24 : IPixel<Rgb24>
}
/// <summary>
/// Allows the implicit conversion of an instance of <see cref="ColorSpaces.Rgb"/> to a
/// Allows the implicit conversion of an instance of <see cref="Rgb"/> to a
/// <see cref="Rgb24"/>.
/// </summary>
/// <param name="color">The instance of <see cref="ColorSpaces.Rgb"/> to convert.</param>
/// <param name="color">The instance of <see cref="Rgb"/> to convert.</param>
/// <returns>An instance of <see cref="Rgb24"/>.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static implicit operator Rgb24(ColorSpaces.Rgb color) => FromScaledVector4(new Vector4(color.ToVector3(), 1f));
public static implicit operator Rgb24(Rgb color) => FromScaledVector4(new Vector4(color.ToVector3(), 1f));
/// <summary>
/// Compares two <see cref="Rgb24"/> objects for equality.

7
src/ImageSharp/PixelFormats/PixelImplementations/Rgba32.cs

@ -7,6 +7,7 @@ using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Intrinsics;
using SixLabors.ImageSharp.ColorProfiles;
namespace SixLabors.ImageSharp.PixelFormats;
@ -180,13 +181,13 @@ public partial struct Rgba32 : IPixel<Rgba32>, IPackedVector<uint>
}
/// <summary>
/// Allows the implicit conversion of an instance of <see cref="ColorSpaces.Rgb"/> to a
/// Allows the implicit conversion of an instance of <see cref="Rgb"/> to a
/// <see cref="Rgba32"/>.
/// </summary>
/// <param name="color">The instance of <see cref="ColorSpaces.Rgb"/> to convert.</param>
/// <param name="color">The instance of <see cref="Rgb"/> to convert.</param>
/// <returns>An instance of <see cref="Rgba32"/>.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static implicit operator Rgba32(ColorSpaces.Rgb color) => FromScaledVector4(new Vector4(color.ToVector3(), 1F));
public static implicit operator Rgba32(Rgb color) => FromScaledVector4(new Vector4(color.ToVector3(), 1F));
/// <summary>
/// Compares two <see cref="Rgba32"/> objects for equality.

6
src/ImageSharp/PixelFormats/Utils/Vector4Converters.cs

@ -3,7 +3,7 @@
using System.Numerics;
using System.Runtime.CompilerServices;
using SixLabors.ImageSharp.ColorSpaces.Companding;
using SixLabors.ImageSharp.ColorProfiles.Companding;
namespace SixLabors.ImageSharp.PixelFormats.Utils;
@ -12,6 +12,8 @@ internal static partial class Vector4Converters
/// <summary>
/// Apply modifiers used requested by ToVector4() conversion.
/// </summary>
/// <param name="vectors">The span of vectors.</param>
/// <param name="modifiers">The modifier rule.</param>
[MethodImpl(InliningOptions.ShortMethod)]
internal static void ApplyForwardConversionModifiers(Span<Vector4> vectors, PixelConversionModifiers modifiers)
{
@ -29,6 +31,8 @@ internal static partial class Vector4Converters
/// <summary>
/// Apply modifiers used requested by FromVector4() conversion.
/// </summary>
/// <param name="vectors">The span of vectors.</param>
/// <param name="modifiers">The modifier rule.</param>
[MethodImpl(InliningOptions.ShortMethod)]
internal static void ApplyBackwardConversionModifiers(Span<Vector4> vectors, PixelConversionModifiers modifiers)
{

1
tests/ImageSharp.Tests/ColorProfiles/ColorProfileConverterChomaticAdaptationTests.cs

@ -1,7 +1,6 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ColorProfiles;
using SixLabors.ImageSharp.ColorProfiles;
namespace SixLabors.ImageSharp.Tests.ColorProfiles;

2
tests/ImageSharp.Tests/ColorProfiles/HslTests.cs

@ -2,7 +2,7 @@
// Licensed under the Six Labors Split License.
using System.Numerics;
using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorProfiles;
namespace SixLabors.ImageSharp.Tests.ColorProfiles;

1
tests/ImageSharp.Tests/ColorProfiles/RgbAndCieXyzConversionTest.cs

@ -1,7 +1,6 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ColorProfiles;
using SixLabors.ImageSharp.ColorProfiles;
namespace SixLabors.ImageSharp.Tests.ColorProfiles;

59
tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs

@ -3,11 +3,10 @@
using System.Runtime.Intrinsics.Arm;
using System.Runtime.Intrinsics.X86;
using SixLabors.ImageSharp.ColorSpaces;
using SixLabors.ImageSharp.ColorSpaces.Conversion;
using SixLabors.ImageSharp.ColorProfiles;
using SixLabors.ImageSharp.Formats.Jpeg.Components;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.Tests.Colorspaces.Conversion;
using SixLabors.ImageSharp.Tests.ColorProfiles;
using SixLabors.ImageSharp.Tests.TestUtilities;
using Xunit.Abstractions;
@ -24,9 +23,9 @@ public class JpegColorConverterTests
private const HwIntrinsics IntrinsicsConfig = HwIntrinsics.AllowAll | HwIntrinsics.DisableAVX2;
private static readonly ApproximateColorSpaceComparer ColorSpaceComparer = new(epsilon: Precision);
private static readonly ApproximateColorProfileComparer ColorSpaceComparer = new(epsilon: Precision);
private static readonly ColorSpaceConverter ColorSpaceConverter = new();
private static readonly ColorProfileConverter ColorSpaceConverter = new();
public static readonly TheoryData<int> Seeds = new() { 1, 2, 3 };
@ -38,7 +37,7 @@ public class JpegColorConverterTests
[Fact]
public void GetConverterThrowsExceptionOnInvalidColorSpace()
{
JpegColorSpace invalidColorSpace = (JpegColorSpace)(-1);
const JpegColorSpace invalidColorSpace = (JpegColorSpace)(-1);
Assert.Throws<InvalidImageContentException>(() => JpegColorConverterBase.GetConverter(invalidColorSpace, 8));
}
@ -46,7 +45,7 @@ public class JpegColorConverterTests
public void GetConverterThrowsExceptionOnInvalidPrecision()
{
// Valid precisions: 8 & 12 bit
int invalidPrecision = 9;
const int invalidPrecision = 9;
Assert.Throws<InvalidImageContentException>(() => JpegColorConverterBase.GetConverter(JpegColorSpace.YCbCr, invalidPrecision));
}
@ -428,7 +427,8 @@ public class JpegColorConverterTests
[Theory]
[MemberData(nameof(Seeds))]
public void FromYCbCrArm(int seed) =>
this.TestConversionToRgb(new JpegColorConverterBase.YCbCrArm(8),
this.TestConversionToRgb(
new JpegColorConverterBase.YCbCrArm(8),
3,
seed,
new JpegColorConverterBase.YCbCrScalar(8));
@ -436,7 +436,8 @@ public class JpegColorConverterTests
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToYCbCrArm(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.YCbCrArm(8),
this.TestConversionFromRgb(
new JpegColorConverterBase.YCbCrArm(8),
3,
seed,
new JpegColorConverterBase.YCbCrScalar(8),
@ -502,7 +503,8 @@ public class JpegColorConverterTests
[Theory]
[MemberData(nameof(Seeds))]
public void FromGrayscaleArm(int seed) =>
this.TestConversionToRgb(new JpegColorConverterBase.GrayscaleArm(8),
this.TestConversionToRgb(
new JpegColorConverterBase.GrayscaleArm(8),
1,
seed,
new JpegColorConverterBase.GrayscaleScalar(8));
@ -510,7 +512,8 @@ public class JpegColorConverterTests
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToGrayscaleArm(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.GrayscaleArm(8),
this.TestConversionFromRgb(
new JpegColorConverterBase.GrayscaleArm(8),
1,
seed,
new JpegColorConverterBase.GrayscaleScalar(8),
@ -556,7 +559,8 @@ public class JpegColorConverterTests
[Theory]
[MemberData(nameof(Seeds))]
public void FromYccKArm64(int seed) =>
this.TestConversionToRgb(new JpegColorConverterBase.YccKArm64(8),
this.TestConversionToRgb(
new JpegColorConverterBase.YccKArm64(8),
4,
seed,
new JpegColorConverterBase.YccKScalar(8));
@ -564,7 +568,8 @@ public class JpegColorConverterTests
[Theory]
[MemberData(nameof(Seeds))]
public void FromRgbToYccKArm64(int seed) =>
this.TestConversionFromRgb(new JpegColorConverterBase.YccKArm64(8),
this.TestConversionFromRgb(
new JpegColorConverterBase.YccKArm64(8),
4,
seed,
new JpegColorConverterBase.YccKScalar(8),
@ -617,9 +622,9 @@ public class JpegColorConverterTests
int componentCount,
int seed)
{
var rnd = new Random(seed);
Random rnd = new(seed);
var buffers = new Buffer2D<float>[componentCount];
Buffer2D<float>[] buffers = new Buffer2D<float>[componentCount];
for (int i = 0; i < componentCount; i++)
{
float[] values = new float[length];
@ -630,8 +635,8 @@ public class JpegColorConverterTests
}
// no need to dispose when buffer is not array owner
var memory = new Memory<float>(values);
var source = MemoryGroup<float>.Wrap(memory);
Memory<float> memory = new(values);
MemoryGroup<float> source = MemoryGroup<float>.Wrap(memory);
buffers[i] = new Buffer2D<float>(source, values.Length, 1);
}
@ -786,9 +791,9 @@ public class JpegColorConverterTests
float y = values.Component0[i];
float cb = values.Component1[i];
float cr = values.Component2[i];
Rgb expected = ColorSpaceConverter.ToRgb(new YCbCr(y, cb, cr));
Rgb expected = ColorSpaceConverter.Convert<YCbCr, Rgb>(new YCbCr(y, cb, cr));
Rgb actual = new(result.Component0[i], result.Component1[i], result.Component2[i]);
Rgb actual = Rgb.Clamp(new(result.Component0[i], result.Component1[i], result.Component2[i]));
bool equal = ColorSpaceComparer.Equals(expected, actual);
Assert.True(equal, $"Colors {expected} and {actual} are not equal at index {i}");
@ -810,9 +815,9 @@ public class JpegColorConverterTests
r /= MaxColorChannelValue;
g /= MaxColorChannelValue;
b /= MaxColorChannelValue;
var expected = new Rgb(r, g, b);
Rgb expected = Rgb.Clamp(new(r, g, b));
var actual = new Rgb(result.Component0[i], result.Component1[i], result.Component2[i]);
Rgb actual = Rgb.Clamp(new(result.Component0[i], result.Component1[i], result.Component2[i]));
bool equal = ColorSpaceComparer.Equals(expected, actual);
Assert.True(equal, $"Colors {expected} and {actual} are not equal at index {i}");
@ -823,9 +828,9 @@ public class JpegColorConverterTests
float r = values.Component0[i] / MaxColorChannelValue;
float g = values.Component1[i] / MaxColorChannelValue;
float b = values.Component2[i] / MaxColorChannelValue;
var expected = new Rgb(r, g, b);
Rgb expected = Rgb.Clamp(new(r, g, b));
var actual = new Rgb(result.Component0[i], result.Component1[i], result.Component2[i]);
Rgb actual = Rgb.Clamp(new(result.Component0[i], result.Component1[i], result.Component2[i]));
bool equal = ColorSpaceComparer.Equals(expected, actual);
Assert.True(equal, $"Colors {expected} and {actual} are not equal at index {i}");
@ -834,9 +839,9 @@ public class JpegColorConverterTests
private static void ValidateGrayScale(in JpegColorConverterBase.ComponentValues values, in JpegColorConverterBase.ComponentValues result, int i)
{
float y = values.Component0[i] / MaxColorChannelValue;
var expected = new Rgb(y, y, y);
Rgb expected = Rgb.Clamp(new(y, y, y));
var actual = new Rgb(result.Component0[i], result.Component0[i], result.Component0[i]);
Rgb actual = Rgb.Clamp(new(result.Component0[i], result.Component0[i], result.Component0[i]));
bool equal = ColorSpaceComparer.Equals(expected, actual);
Assert.True(equal, $"Colors {expected} and {actual} are not equal at index {i}");
@ -852,9 +857,9 @@ public class JpegColorConverterTests
float r = c * k / MaxColorChannelValue;
float g = m * k / MaxColorChannelValue;
float b = y * k / MaxColorChannelValue;
var expected = new Rgb(r, g, b);
Rgb expected = Rgb.Clamp(new(r, g, b));
var actual = new Rgb(result.Component0[i], result.Component1[i], result.Component2[i]);
Rgb actual = Rgb.Clamp(new(result.Component0[i], result.Component1[i], result.Component2[i]));
bool equal = ColorSpaceComparer.Equals(expected, actual);
Assert.True(equal, $"Colors {expected} and {actual} are not equal at index {i}");

36
tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelOperationsTests.cs

@ -5,7 +5,7 @@ using System.Buffers;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using SixLabors.ImageSharp.ColorSpaces.Companding;
using SixLabors.ImageSharp.ColorProfiles.Companding;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests.Common;
@ -161,12 +161,12 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
[MemberData(nameof(ArraySizesData))]
public void FromCompandedScaledVector4(int count)
{
void SourceAction(ref Vector4 v) => SRgbCompanding.Expand(ref v);
void SourceAction(ref Vector4 v) => v = SRgbCompanding.Expand(v);
void ExpectedAction(ref Vector4 v) => SRgbCompanding.Compress(ref v);
void ExpectedAction(ref Vector4 v) => v = SRgbCompanding.Compress(v);
Vector4[] source = CreateVector4TestData(count, (ref Vector4 v) => SourceAction(ref v));
TPixel[] expected = CreateScaledExpectedPixelData(source, (ref Vector4 v) => ExpectedAction(ref v));
Vector4[] source = CreateVector4TestData(count, SourceAction);
TPixel[] expected = CreateScaledExpectedPixelData(source, ExpectedAction);
TestOperation(
source,
@ -261,7 +261,7 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
{
void SourceAction(ref Vector4 v)
{
SRgbCompanding.Expand(ref v);
v = SRgbCompanding.Expand(v);
if (this.HasUnassociatedAlpha)
{
@ -276,11 +276,11 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
Numerics.UnPremultiply(ref v);
}
SRgbCompanding.Compress(ref v);
v = SRgbCompanding.Compress(v);
}
Vector4[] source = CreateVector4TestData(count, (ref Vector4 v) => SourceAction(ref v));
TPixel[] expected = CreateScaledExpectedPixelData(source, (ref Vector4 v) => ExpectedAction(ref v));
Vector4[] source = CreateVector4TestData(count, SourceAction);
TPixel[] expected = CreateScaledExpectedPixelData(source, ExpectedAction);
TestOperation(
source,
@ -385,10 +385,10 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
{
}
void ExpectedAction(ref Vector4 v) => SRgbCompanding.Expand(ref v);
void ExpectedAction(ref Vector4 v) => v = SRgbCompanding.Expand(v);
TPixel[] source = CreateScaledPixelTestData(count, (ref Vector4 v) => SourceAction(ref v));
Vector4[] expected = CreateExpectedScaledVector4Data(source, (ref Vector4 v) => ExpectedAction(ref v));
TPixel[] source = CreateScaledPixelTestData(count, SourceAction);
Vector4[] expected = CreateExpectedScaledVector4Data(source, ExpectedAction);
TestOperation(
source,
@ -410,8 +410,8 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
void ExpectedAction(ref Vector4 v) => Numerics.Premultiply(ref v);
TPixel[] source = CreatePixelTestData(count, (ref Vector4 v) => SourceAction(ref v));
Vector4[] expected = CreateExpectedVector4Data(source, (ref Vector4 v) => ExpectedAction(ref v));
TPixel[] source = CreatePixelTestData(count, SourceAction);
Vector4[] expected = CreateExpectedVector4Data(source, ExpectedAction);
TestOperation(
source,
@ -429,7 +429,7 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
void ExpectedAction(ref Vector4 v) => Numerics.Premultiply(ref v);
TPixel[] source = CreateScaledPixelTestData(count, (ref Vector4 v) => SourceAction(ref v));
TPixel[] source = CreateScaledPixelTestData(count, SourceAction);
Vector4[] expected = CreateExpectedScaledVector4Data(source, (ref Vector4 v) => ExpectedAction(ref v));
TestOperation(
@ -452,12 +452,12 @@ public abstract class PixelOperationsTests<TPixel> : MeasureFixture
void ExpectedAction(ref Vector4 v)
{
SRgbCompanding.Expand(ref v);
v = SRgbCompanding.Expand(v);
Numerics.Premultiply(ref v);
}
TPixel[] source = CreateScaledPixelTestData(count, (ref Vector4 v) => SourceAction(ref v));
Vector4[] expected = CreateExpectedScaledVector4Data(source, (ref Vector4 v) => ExpectedAction(ref v));
TPixel[] source = CreateScaledPixelTestData(count, SourceAction);
Vector4[] expected = CreateExpectedScaledVector4Data(source, ExpectedAction);
TestOperation(
source,

Loading…
Cancel
Save