Browse Source

Merge pull request #2326 from stefannikolei/stefannikolei/nullable/color

Remove nullable disable from ColorSpace and Color
pull/2335/head
James Jackson-South 4 years ago
committed by GitHub
parent
commit
03cc807eb5
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      src/ImageSharp/Color/Color.cs
  2. 8
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs
  3. 18
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs
  4. 5
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs
  5. 2
      src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs
  6. 4
      src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs

5
src/ImageSharp/Color/Color.cs

@ -1,6 +1,5 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Six Labors Split License. // Licensed under the Six Labors Split License.
#nullable disable
using System.Numerics; using System.Numerics;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
@ -20,7 +19,7 @@ namespace SixLabors.ImageSharp;
public readonly partial struct Color : IEquatable<Color> public readonly partial struct Color : IEquatable<Color>
{ {
private readonly Rgba64 data; private readonly Rgba64 data;
private readonly IPixel boxedHighPrecisionPixel; private readonly IPixel? boxedHighPrecisionPixel;
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
private Color(byte r, byte g, byte b, byte a) private Color(byte r, byte g, byte b, byte a)
@ -317,7 +316,7 @@ public readonly partial struct Color : IEquatable<Color>
} }
/// <inheritdoc /> /// <inheritdoc />
public override bool Equals(object obj) => obj is Color other && this.Equals(other); public override bool Equals(object? obj) => obj is Color other && this.Equals(other);
/// <inheritdoc /> /// <inheritdoc />
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]

8
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.Adapt.cs

@ -32,7 +32,8 @@ public partial class ColorSpaceConverter
return color; return color;
} }
return this.chromaticAdaptation.Transform(color, sourceWhitePoint, targetWhitePoint); // We know that chromaticAdaption is not null because performChromaticAdaption is checked
return this.chromaticAdaptation!.Transform(color, sourceWhitePoint, targetWhitePoint);
} }
/// <summary> /// <summary>
@ -128,11 +129,12 @@ public partial class ColorSpaceConverter
} }
// Conversion to XYZ // Conversion to XYZ
LinearRgbToCieXyzConverter converterToXYZ = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace); LinearRgbToCieXyzConverter converterToXYZ = GetLinearRgbToCieXyzConverter(color.WorkingSpace);
CieXyz unadapted = converterToXYZ.Convert(color); CieXyz unadapted = converterToXYZ.Convert(color);
// Adaptation // Adaptation
CieXyz adapted = this.chromaticAdaptation.Transform(unadapted, color.WorkingSpace.WhitePoint, this.targetRgbWorkingSpace.WhitePoint); // We know that chromaticAdaption is not null because performChromaticAdaption is checked
CieXyz adapted = this.chromaticAdaptation!.Transform(unadapted, color.WorkingSpace.WhitePoint, this.targetRgbWorkingSpace.WhitePoint);
// Conversion back to RGB // Conversion back to RGB
return this.cieXyzToLinearRgbConverter.Convert(adapted); return this.cieXyzToLinearRgbConverter.Convert(adapted);

18
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.CieXyz.cs

@ -1,6 +1,7 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Six Labors Split License. // Licensed under the Six Labors Split License.
using System.Collections.Concurrent;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -11,9 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
/// </content> /// </content>
public partial class ColorSpaceConverter public partial class ColorSpaceConverter
{ {
private static readonly HunterLabToCieXyzConverter HunterLabToCieXyzConverter = new(); private static readonly ConcurrentDictionary<RgbWorkingSpace, LinearRgbToCieXyzConverter> ConverterCache = new();
private LinearRgbToCieXyzConverter linearRgbToCieXyzConverter;
/// <summary> /// <summary>
/// Converts a <see cref="CieLab"/> into a <see cref="CieXyz"/>. /// Converts a <see cref="CieLab"/> into a <see cref="CieXyz"/>.
@ -327,7 +326,7 @@ public partial class ColorSpaceConverter
public CieXyz ToCieXyz(in LinearRgb color) public CieXyz ToCieXyz(in LinearRgb color)
{ {
// Conversion // Conversion
LinearRgbToCieXyzConverter converter = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace); LinearRgbToCieXyzConverter converter = GetLinearRgbToCieXyzConverter(color.WorkingSpace);
CieXyz unadapted = converter.Convert(color); CieXyz unadapted = converter.Convert(color);
return this.Adapt(unadapted, color.WorkingSpace.WhitePoint); return this.Adapt(unadapted, color.WorkingSpace.WhitePoint);
@ -454,13 +453,6 @@ public partial class ColorSpaceConverter
/// </summary> /// </summary>
/// <param name="workingSpace">The source working space</param> /// <param name="workingSpace">The source working space</param>
/// <returns>The <see cref="LinearRgbToCieXyzConverter"/></returns> /// <returns>The <see cref="LinearRgbToCieXyzConverter"/></returns>
private LinearRgbToCieXyzConverter GetLinearRgbToCieXyzConverter(RgbWorkingSpace workingSpace) private static LinearRgbToCieXyzConverter GetLinearRgbToCieXyzConverter(RgbWorkingSpace workingSpace)
{ => ConverterCache.GetOrAdd(workingSpace, (key) => new LinearRgbToCieXyzConverter(key));
if (this.linearRgbToCieXyzConverter?.SourceWorkingSpace.Equals(workingSpace) == true)
{
return this.linearRgbToCieXyzConverter;
}
return this.linearRgbToCieXyzConverter = new LinearRgbToCieXyzConverter(workingSpace);
}
} }

5
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs

@ -1,6 +1,5 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Six Labors Split License. // Licensed under the Six Labors Split License.
#nullable disable
using System.Numerics; using System.Numerics;
@ -12,14 +11,14 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
public partial class ColorSpaceConverter public partial class ColorSpaceConverter
{ {
// Options. // Options.
private static readonly ColorSpaceConverterOptions DefaultOptions = new ColorSpaceConverterOptions(); private static readonly ColorSpaceConverterOptions DefaultOptions = new();
private readonly Matrix4x4 lmsAdaptationMatrix; private readonly Matrix4x4 lmsAdaptationMatrix;
private readonly CieXyz whitePoint; private readonly CieXyz whitePoint;
private readonly CieXyz targetLuvWhitePoint; private readonly CieXyz targetLuvWhitePoint;
private readonly CieXyz targetLabWhitePoint; private readonly CieXyz targetLabWhitePoint;
private readonly CieXyz targetHunterLabWhitePoint; private readonly CieXyz targetHunterLabWhitePoint;
private readonly RgbWorkingSpace targetRgbWorkingSpace; private readonly RgbWorkingSpace targetRgbWorkingSpace;
private readonly IChromaticAdaptation chromaticAdaptation; private readonly IChromaticAdaptation? chromaticAdaptation;
private readonly bool performChromaticAdaptation; private readonly bool performChromaticAdaptation;
private readonly CieXyzAndLmsConverter cieXyzAndLmsConverter; private readonly CieXyzAndLmsConverter cieXyzAndLmsConverter;
private readonly CieXyzToCieLabConverter cieXyzToCieLabConverter; private readonly CieXyzToCieLabConverter cieXyzToCieLabConverter;

2
src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs

@ -44,7 +44,7 @@ public class ColorSpaceConverterOptions
/// <summary> /// <summary>
/// Gets or sets the chromatic adaptation method used. When <value>null</value>, no adaptation will be performed. /// Gets or sets the chromatic adaptation method used. When <value>null</value>, no adaptation will be performed.
/// </summary> /// </summary>
public IChromaticAdaptation ChromaticAdaptation { get; set; } = new VonKriesChromaticAdaptation(); public IChromaticAdaptation? ChromaticAdaptation { get; set; } = new VonKriesChromaticAdaptation();
/// <summary> /// <summary>
/// Gets or sets transformation matrix used in conversion to and from <see cref="Lms"/>. /// Gets or sets transformation matrix used in conversion to and from <see cref="Lms"/>.

4
src/ImageSharp/ColorSpaces/Conversion/Implementation/WorkingSpaces/RgbWorkingSpace.cs

@ -75,7 +75,5 @@ public abstract class RgbWorkingSpace
/// <inheritdoc/> /// <inheritdoc/>
public override int GetHashCode() public override int GetHashCode()
{ => HashCode.Combine(this.WhitePoint, this.ChromaticityCoordinates);
return HashCode.Combine(this.WhitePoint, this.ChromaticityCoordinates);
}
} }

Loading…
Cancel
Save