diff --git a/src/ImageSharp/Colors/Spaces/CieLab.cs b/src/ImageSharp/Colors/Spaces/CieLab.cs index e5edfcc79..80e8a41a3 100644 --- a/src/ImageSharp/Colors/Spaces/CieLab.cs +++ b/src/ImageSharp/Colors/Spaces/CieLab.cs @@ -77,6 +77,9 @@ namespace ImageSharp.Colors.Spaces this.WhitePoint = whitePoint; } + /// + /// Gets the reference white point of this color + /// public CieXyz WhitePoint { get; } /// diff --git a/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.Adapt.cs b/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.Adapt.cs index fc768d3ea..e564cabb3 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.Adapt.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.Adapt.cs @@ -17,6 +17,9 @@ namespace ImageSharp.Colors.Conversion /// Performs chromatic adaptation of given XYZ color. /// Target white point is . /// + /// The color to adapt + /// The white point to adapt for + /// The adapted color public CieXyz Adapt(CieXyz color, CieXyz sourceWhitePoint) { Guard.NotNull(color, nameof(color)); diff --git a/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.CieXyz.cs b/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.CieXyz.cs index 66f3b25e7..c5b103116 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.CieXyz.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.CieXyz.cs @@ -25,7 +25,6 @@ namespace ImageSharp.Colors.Conversion Guard.NotNull(color, nameof(color)); // Conversion - CieXyz unadapted = CieLabToCieXyzConverter.Convert(color); // Adaptation diff --git a/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.cs b/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.cs index 93d04e7e1..d02e924d1 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/ColorConverter.cs @@ -14,14 +14,14 @@ namespace ImageSharp.Colors.Conversion /// public partial class ColorConverter { - private Matrix4x4 transformationMatrix; - private CieXyzAndLmsConverter cachedCieXyzAndLmsConverter; - /// /// The default whitepoint used for converting to CieLab /// public static readonly CieXyz DefaultWhitePoint = Illuminants.D65; + private Matrix4x4 transformationMatrix; + private CieXyzAndLmsConverter cachedCieXyzAndLmsConverter; + /// /// Initializes a new instance of the class. /// @@ -57,11 +57,14 @@ namespace ImageSharp.Colors.Conversion /// public Matrix4x4 LmsAdaptationMatrix { - get { return this.transformationMatrix; } + get + { + return this.transformationMatrix; + } + set { this.transformationMatrix = value; - if (this.cachedCieXyzAndLmsConverter == null) { this.cachedCieXyzAndLmsConverter = new CieXyzAndLmsConverter(value); diff --git a/src/ImageSharp/Colors/Spaces/Conversion/IColorConversion.cs b/src/ImageSharp/Colors/Spaces/Conversion/IColorConversion.cs index ad653da94..73a90cdde 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/IColorConversion.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/IColorConversion.cs @@ -13,10 +13,10 @@ namespace ImageSharp.Colors.Conversion public interface IColorConversion { /// - /// Performs the conversion from the input to an instance of the output type. + /// Performs the conversion from the input to an instance of the output type. /// /// The input color instance. - /// The + /// The converted result TResult Convert(T input); } } \ No newline at end of file diff --git a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieLabToCieXyzConverter.cs b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieLabToCieXyzConverter.cs index 1d9ab6269..3f94ef607 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieLabToCieXyzConverter.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieLabToCieXyzConverter.cs @@ -21,15 +21,15 @@ namespace ImageSharp.Colors.Conversion.Implementation // Conversion algorithm described here: http://www.brucelindbloom.com/index.html?Eqn_Lab_to_XYZ.html float l = input.L, a = input.A, b = input.B; float fy = (l + 16) / 116F; - float fx = a / 500F + fy; - float fz = fy - b / 200F; + float fx = (a / 500F) + fy; + float fz = fy - (b / 200F); float fx3 = (float)Math.Pow(fx, 3D); float fz3 = (float)Math.Pow(fz, 3D); - float xr = fx3 > CieConstants.Epsilon ? fx3 : (116F * fx - 16F) / CieConstants.Kappa; + float xr = fx3 > CieConstants.Epsilon ? fx3 : ((116F * fx) - 16F) / CieConstants.Kappa; float yr = l > CieConstants.Kappa * CieConstants.Epsilon ? (float)Math.Pow((l + 16F) / 116F, 3D) : l / CieConstants.Kappa; - float zr = fz3 > CieConstants.Epsilon ? fz3 : (116F * fz - 16F) / CieConstants.Kappa; + float zr = fz3 > CieConstants.Epsilon ? fz3 : ((116F * fz) - 16F) / CieConstants.Kappa; float wx = input.WhitePoint.X, wy = input.WhitePoint.Y, wz = input.WhitePoint.Z; diff --git a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs index ddd7c4bb2..34540512d 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/CieLab/CieXyzToCieLabConverter.cs @@ -45,9 +45,9 @@ namespace ImageSharp.Colors.Conversion.Implementation float xr = input.X / wx, yr = input.Y / wy, zr = input.Z / wz; - float fx = xr > CieConstants.Epsilon ? (float)Math.Pow(xr, 0.333333333333333D) : (CieConstants.Kappa * xr + 16F) / 116F; - float fy = yr > CieConstants.Epsilon ? (float)Math.Pow(yr, 0.333333333333333D) : (CieConstants.Kappa * yr + 16F) / 116F; - float fz = zr > CieConstants.Epsilon ? (float)Math.Pow(zr, 0.333333333333333D) : (CieConstants.Kappa * zr + 16F) / 116F; + float fx = xr > CieConstants.Epsilon ? (float)Math.Pow(xr, 0.333333333333333D) : ((CieConstants.Kappa * xr) + 16F) / 116F; + float fy = yr > CieConstants.Epsilon ? (float)Math.Pow(yr, 0.333333333333333D) : ((CieConstants.Kappa * yr) + 16F) / 116F; + float fz = zr > CieConstants.Epsilon ? (float)Math.Pow(zr, 0.333333333333333D) : ((CieConstants.Kappa * zr) + 16F) / 116F; float l = (116F * fy) - 16F; float a = 500F * (fx - fy); diff --git a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs index 69899e0db..e467946c5 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/CieXyzAndLmsConverter.cs @@ -3,12 +3,14 @@ // Licensed under the Apache License, Version 2.0. // -using System.Numerics; - namespace ImageSharp.Colors.Conversion.Implementation { + using System.Numerics; using Spaces; + /// + /// Color converter between CIE XYZ and LMS + /// public class CieXyzAndLmsConverter : IColorConversion, IColorConversion { /// @@ -20,20 +22,6 @@ namespace ImageSharp.Colors.Conversion.Implementation private Matrix4x4 inverseTransformationMatrix; private Matrix4x4 transformationMatrix; - /// - /// Transformation matrix used for the conversion (definition of the cone response domain). - /// - /// - public Matrix4x4 TransformationMatrix - { - get { return this.transformationMatrix; } - internal set - { - this.transformationMatrix = value; - Matrix4x4.Invert(this.transformationMatrix, out this.inverseTransformationMatrix); - } - } - /// /// Initializes a new instance of the class. /// @@ -54,6 +42,24 @@ namespace ImageSharp.Colors.Conversion.Implementation this.TransformationMatrix = transformationMatrix; } + /// + /// Gets transformation matrix used for the conversion (definition of the cone response domain). + /// + /// + public Matrix4x4 TransformationMatrix + { + get + { + return this.transformationMatrix; + } + + internal set + { + this.transformationMatrix = value; + Matrix4x4.Invert(this.transformationMatrix, out this.inverseTransformationMatrix); + } + } + /// public Lms Convert(CieXyz input) { diff --git a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/LmsAdaptationMatrix.cs b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/LmsAdaptationMatrix.cs index fe3ded527..25344af68 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/LmsAdaptationMatrix.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/Implementation/Lms/LmsAdaptationMatrix.cs @@ -74,10 +74,10 @@ namespace ImageSharp.Colors.Conversion.Implementation M44 = 1F }; - /// - /// CMCCAT2000 (fitted from all available color data sets) - /// - public static readonly Matrix4x4 CMCCAT2000 + /// + /// CMCCAT2000 (fitted from all available color data sets) + /// + public static readonly Matrix4x4 CMCCAT2000 = new Matrix4x4 { M11 = 0.7982F, M12 = 0.3389F, M13 = -0.1371F, diff --git a/src/ImageSharp/Colors/Spaces/Conversion/VonKriesChromaticAdaptation.cs b/src/ImageSharp/Colors/Spaces/Conversion/VonKriesChromaticAdaptation.cs index a5b92d06d..801f7cf15 100644 --- a/src/ImageSharp/Colors/Spaces/Conversion/VonKriesChromaticAdaptation.cs +++ b/src/ImageSharp/Colors/Spaces/Conversion/VonKriesChromaticAdaptation.cs @@ -43,15 +43,6 @@ namespace ImageSharp.Colors.Conversion { } - /// - /// Initializes a new instance of the class. - /// - /// - private VonKriesChromaticAdaptation(CieXyzAndLmsConverter converter) - : this(converter, converter) - { - } - /// /// Initializes a new instance of the class. /// @@ -66,6 +57,15 @@ namespace ImageSharp.Colors.Conversion this.conversionToXyz = conversionToCieXyz; } + /// + /// Initializes a new instance of the class. + /// + /// The color converter + private VonKriesChromaticAdaptation(CieXyzAndLmsConverter converter) + : this(converter, converter) + { + } + /// public CieXyz Transform(CieXyz sourceColor, CieXyz sourceWhitePoint, CieXyz targetWhitePoint) { diff --git a/src/ImageSharp/Colors/Spaces/IColorVector.cs b/src/ImageSharp/Colors/Spaces/IColorVector.cs index 10ad9d30f..409b0c540 100644 --- a/src/ImageSharp/Colors/Spaces/IColorVector.cs +++ b/src/ImageSharp/Colors/Spaces/IColorVector.cs @@ -13,7 +13,7 @@ namespace ImageSharp.Colors.Spaces public interface IColorVector { /// - /// The vector representation of the color + /// Gets the vector representation of the color /// Vector3 Vector { get; } } diff --git a/src/ImageSharp/Colors/Spaces/ICompanding.cs b/src/ImageSharp/Colors/Spaces/ICompanding.cs index f20946b4f..11e920f39 100644 --- a/src/ImageSharp/Colors/Spaces/ICompanding.cs +++ b/src/ImageSharp/Colors/Spaces/ICompanding.cs @@ -19,6 +19,8 @@ namespace ImageSharp.Colors.Spaces /// For more info see: /// http://www.brucelindbloom.com/index.html?Eqn_RGB_to_XYZ.html /// + /// The channel value + /// The linear channel value float InverseCompanding(float channel); /// @@ -28,6 +30,8 @@ namespace ImageSharp.Colors.Spaces /// For more info see: /// http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_RGB.html /// + /// The channel value + /// The nonlinear channel value float Companding(float channel); } } diff --git a/src/ImageSharp/Colors/Spaces/IRgbWorkingSpace.cs b/src/ImageSharp/Colors/Spaces/IRgbWorkingSpace.cs index cc759753b..76b70a911 100644 --- a/src/ImageSharp/Colors/Spaces/IRgbWorkingSpace.cs +++ b/src/ImageSharp/Colors/Spaces/IRgbWorkingSpace.cs @@ -15,13 +15,13 @@ namespace ImageSharp.Colors.Spaces /// CieXyz WhitePoint { get; } - /// - /// Chromaticity coordinates of the primaries - /// + // + // Gets Chromaticity coordinates of the primaries + // // RGBPrimariesChromaticityCoordinates ChromaticityCoordinates { get; } /// - /// The companding function associated with the RGB color system. + /// Gets the companding function associated with the RGB color system. /// Used for conversion to XYZ and backwards. /// See this for more information: /// http://www.brucelindbloom.com/index.html?Eqn_RGB_to_XYZ.html diff --git a/src/ImageSharp/Colors/Spaces/Illuminants.cs b/src/ImageSharp/Colors/Spaces/Illuminants.cs index 51ef4d8d9..398a635bf 100644 --- a/src/ImageSharp/Colors/Spaces/Illuminants.cs +++ b/src/ImageSharp/Colors/Spaces/Illuminants.cs @@ -1,7 +1,7 @@ namespace ImageSharp.Colors.Spaces { /// - /// The well known standard illuminants. + /// The well known standard illuminants. /// Standard illuminants provide a basis for comparing images or colors recorded under different lighting /// ///