11// Copyright (c) Six Labors.
22// Licensed under the Six Labors Split License.
33
4+ using System . Collections . Concurrent ;
45using System . Runtime . CompilerServices ;
56using System . Runtime . InteropServices ;
67
@@ -11,9 +12,7 @@ namespace SixLabors.ImageSharp.ColorSpaces.Conversion;
1112/// </content>
1213public 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}
0 commit comments