Skip to content

Commit 03cc807

Browse files
Merge pull request #2326 from stefannikolei/stefannikolei/nullable/color
Remove nullable disable from ColorSpace and Color
2 parents 22840b3 + 7f1fc96 commit 03cc807

File tree

6 files changed

+16
-26
lines changed

6 files changed

+16
-26
lines changed

src/ImageSharp/Color/Color.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Copyright (c) Six Labors.
22
// Licensed under the Six Labors Split License.
3-
#nullable disable
43

54
using System.Numerics;
65
using System.Runtime.CompilerServices;
@@ -20,7 +19,7 @@ namespace SixLabors.ImageSharp;
2019
public readonly partial struct Color : IEquatable<Color>
2120
{
2221
private readonly Rgba64 data;
23-
private readonly IPixel boxedHighPrecisionPixel;
22+
private readonly IPixel? boxedHighPrecisionPixel;
2423

2524
[MethodImpl(InliningOptions.ShortMethod)]
2625
private Color(byte r, byte g, byte b, byte a)
@@ -317,7 +316,7 @@ public bool Equals(Color other)
317316
}
318317

319318
/// <inheritdoc />
320-
public override bool Equals(object obj) => obj is Color other && this.Equals(other);
319+
public override bool Equals(object? obj) => obj is Color other && this.Equals(other);
321320

322321
/// <inheritdoc />
323322
[MethodImpl(InliningOptions.ShortMethod)]

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ public CieXyz Adapt(in CieXyz color, in CieXyz sourceWhitePoint, in CieXyz targe
3232
return color;
3333
}
3434

35-
return this.chromaticAdaptation.Transform(color, sourceWhitePoint, targetWhitePoint);
35+
// We know that chromaticAdaption is not null because performChromaticAdaption is checked
36+
return this.chromaticAdaptation!.Transform(color, sourceWhitePoint, targetWhitePoint);
3637
}
3738

3839
/// <summary>
@@ -128,11 +129,12 @@ public LinearRgb Adapt(in LinearRgb color)
128129
}
129130

130131
// Conversion to XYZ
131-
LinearRgbToCieXyzConverter converterToXYZ = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace);
132+
LinearRgbToCieXyzConverter converterToXYZ = GetLinearRgbToCieXyzConverter(color.WorkingSpace);
132133
CieXyz unadapted = converterToXYZ.Convert(color);
133134

134135
// Adaptation
135-
CieXyz adapted = this.chromaticAdaptation.Transform(unadapted, color.WorkingSpace.WhitePoint, this.targetRgbWorkingSpace.WhitePoint);
136+
// We know that chromaticAdaption is not null because performChromaticAdaption is checked
137+
CieXyz adapted = this.chromaticAdaptation!.Transform(unadapted, color.WorkingSpace.WhitePoint, this.targetRgbWorkingSpace.WhitePoint);
136138

137139
// Conversion back to RGB
138140
return this.cieXyzToLinearRgbConverter.Convert(adapted);

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

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Six Labors.
22
// Licensed under the Six Labors Split License.
33

4+
using System.Collections.Concurrent;
45
using System.Runtime.CompilerServices;
56
using System.Runtime.InteropServices;
67

@@ -11,9 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
1112
/// </content>
1213
public partial class ColorSpaceConverter
1314
{
14-
private static readonly HunterLabToCieXyzConverter HunterLabToCieXyzConverter = new();
15-
16-
private LinearRgbToCieXyzConverter linearRgbToCieXyzConverter;
15+
private static readonly ConcurrentDictionary<RgbWorkingSpace, LinearRgbToCieXyzConverter> ConverterCache = new();
1716

1817
/// <summary>
1918
/// Converts a <see cref="CieLab"/> into a <see cref="CieXyz"/>.
@@ -327,7 +326,7 @@ public void Convert(ReadOnlySpan<HunterLab> source, Span<CieXyz> destination)
327326
public CieXyz ToCieXyz(in LinearRgb color)
328327
{
329328
// Conversion
330-
LinearRgbToCieXyzConverter converter = this.GetLinearRgbToCieXyzConverter(color.WorkingSpace);
329+
LinearRgbToCieXyzConverter converter = GetLinearRgbToCieXyzConverter(color.WorkingSpace);
331330
CieXyz unadapted = converter.Convert(color);
332331

333332
return this.Adapt(unadapted, color.WorkingSpace.WhitePoint);
@@ -454,13 +453,6 @@ public void Convert(ReadOnlySpan<YCbCr> source, Span<CieXyz> destination)
454453
/// </summary>
455454
/// <param name="workingSpace">The source working space</param>
456455
/// <returns>The <see cref="LinearRgbToCieXyzConverter"/></returns>
457-
private LinearRgbToCieXyzConverter GetLinearRgbToCieXyzConverter(RgbWorkingSpace workingSpace)
458-
{
459-
if (this.linearRgbToCieXyzConverter?.SourceWorkingSpace.Equals(workingSpace) == true)
460-
{
461-
return this.linearRgbToCieXyzConverter;
462-
}
463-
464-
return this.linearRgbToCieXyzConverter = new LinearRgbToCieXyzConverter(workingSpace);
465-
}
456+
private static LinearRgbToCieXyzConverter GetLinearRgbToCieXyzConverter(RgbWorkingSpace workingSpace)
457+
=> ConverterCache.GetOrAdd(workingSpace, (key) => new LinearRgbToCieXyzConverter(key));
466458
}

src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverter.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Copyright (c) Six Labors.
22
// Licensed under the Six Labors Split License.
3-
#nullable disable
43

54
using System.Numerics;
65

@@ -12,14 +11,14 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
1211
public partial class ColorSpaceConverter
1312
{
1413
// Options.
15-
private static readonly ColorSpaceConverterOptions DefaultOptions = new ColorSpaceConverterOptions();
14+
private static readonly ColorSpaceConverterOptions DefaultOptions = new();
1615
private readonly Matrix4x4 lmsAdaptationMatrix;
1716
private readonly CieXyz whitePoint;
1817
private readonly CieXyz targetLuvWhitePoint;
1918
private readonly CieXyz targetLabWhitePoint;
2019
private readonly CieXyz targetHunterLabWhitePoint;
2120
private readonly RgbWorkingSpace targetRgbWorkingSpace;
22-
private readonly IChromaticAdaptation chromaticAdaptation;
21+
private readonly IChromaticAdaptation? chromaticAdaptation;
2322
private readonly bool performChromaticAdaptation;
2423
private readonly CieXyzAndLmsConverter cieXyzAndLmsConverter;
2524
private readonly CieXyzToCieLabConverter cieXyzToCieLabConverter;

src/ImageSharp/ColorSpaces/Conversion/ColorSpaceConverterOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class ColorSpaceConverterOptions
4444
/// <summary>
4545
/// Gets or sets the chromatic adaptation method used. When <value>null</value>, no adaptation will be performed.
4646
/// </summary>
47-
public IChromaticAdaptation ChromaticAdaptation { get; set; } = new VonKriesChromaticAdaptation();
47+
public IChromaticAdaptation? ChromaticAdaptation { get; set; } = new VonKriesChromaticAdaptation();
4848

4949
/// <summary>
5050
/// Gets or sets transformation matrix used in conversion to and from <see cref="Lms"/>.

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,5 @@ public override bool Equals(object? obj)
7575

7676
/// <inheritdoc/>
7777
public override int GetHashCode()
78-
{
79-
return HashCode.Combine(this.WhitePoint, this.ChromaticityCoordinates);
80-
}
78+
=> HashCode.Combine(this.WhitePoint, this.ChromaticityCoordinates);
8179
}

0 commit comments

Comments
 (0)