public void Convert_HunterLab_to_CieXyy(float l, float a, float b, float x, float y, float yl)
        {
            // Arrange
            var input    = new HunterLab(l, a, b);
            var expected = new CieXyy(x, y, yl);

            Span <HunterLab> inputSpan = new HunterLab[5];

            inputSpan.Fill(input);

            Span <CieXyy> actualSpan = new CieXyy[5];

            // Act
            CieXyy actual = Converter.ToCieXyy(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
Example #2
0
        public void Convert_HunterLab_to_Cmyk(float l, float a, float b, float c, float m, float y, float k)
        {
            // Arrange
            var input    = new HunterLab(l, a, b);
            var expected = new Cmyk(c, m, y, k);

            Span <HunterLab> inputSpan = new HunterLab[5];

            inputSpan.Fill(input);

            Span <Cmyk> actualSpan = new Cmyk[5];

            // Act
            var actual = Converter.ToCmyk(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
        [InlineData(0.95047, 1, 1.08883, 100, 0, 0)] // D65 white point is HunterLab 100, 0, 0 (adaptation to C performed)
        public void Convert_Xyz_D65_to_HunterLab(float x, float y, float z, float l, float a, float b)
        {
            // Arrange
            var input   = new CieXyz(x, y, z);
            var options = new ColorSpaceConverterOptions {
                WhitePoint = Illuminants.D65
            };
            var converter = new ColorSpaceConverter(options);
            var expected  = new HunterLab(l, a, b);

            Span <CieXyz> inputSpan = new CieXyz[5];

            inputSpan.Fill(input);

            Span <HunterLab> actualSpan = new HunterLab[5];

            // Act
            var actual = converter.ToHunterLab(input);

            converter.Convert(inputSpan, actualSpan, actualSpan.Length);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
Example #4
0
        public void Convert_CieLuv_to_HunterLab(float l, float u, float v, float l2, float a, float b)
        {
            // Arrange
            var input    = new CieLuv(l, u, v);
            var expected = new HunterLab(l2, a, b);

            Span <CieLuv> inputSpan = new CieLuv[5];

            inputSpan.Fill(input);

            Span <HunterLab> actualSpan = new HunterLab[5];

            // Act
            var actual = Converter.ToHunterLab(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
Example #5
0
        public void Convert_HunterLab_to_CieLch(float l2, float a, float b, float l, float c, float h)
        {
            // Arrange
            var input    = new HunterLab(l2, a, b);
            var expected = new CieLch(l, c, h);

            Span <HunterLab> inputSpan = new HunterLab[5];

            inputSpan.Fill(input);

            Span <CieLch> actualSpan = new CieLch[5];

            // Act
            var actual = Converter.ToCieLch(input);

            Converter.Convert(inputSpan, actualSpan);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);

            for (int i = 0; i < actualSpan.Length; i++)
            {
                Assert.Equal(expected, actualSpan[i], ColorSpaceComparer);
            }
        }
Example #6
0
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="YCbCr"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="YCbCr"/></returns>
        public YCbCr ToYCbCr(HunterLab color)
        {
            Guard.NotNull(color, nameof(color));

            var xyzColor = this.ToCieXyz(color);

            return(this.ToYCbCr(xyzColor));
        }
Example #7
0
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="LinearRgb"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="LinearRgb"/></returns>
        public LinearRgb ToLinearRgb(HunterLab color)
        {
            Guard.NotNull(color, nameof(color));

            var xyzColor = this.ToCieXyz(color);

            return(this.ToLinearRgb(xyzColor));
        }
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="CieLchuv"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="CieLchuv"/></returns>
        public CieLchuv ToCieLchuv(HunterLab color)
        {
            Guard.NotNull(color, nameof(color));

            CieXyz xyzColor = this.ToCieXyz(color);

            return(this.ToCieLchuv(xyzColor));
        }
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="Lms"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="Lms"/></returns>
        public Lms ToLms(HunterLab color)
        {
            Guard.NotNull(color, nameof(color));

            var xyzColor = this.ToCieXyz(color);

            return(this.ToLms(xyzColor));
        }
            public void SalmonHunterLabToHex()
            {
                var knownColor = new HunterLab {
                    L = 60.809, A = 40.886, B = 22.664,
                };
                var expectedColor = new Hex("FA8072");

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
            public void SalmonHunterLabToMunsell()
            {
                var knownColor = new HunterLab {
                    L = 60.809, A = 40.886, B = 22.664,
                };
                var expectedColor = new Munsell("7.5R 7/12");

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
Example #12
0
            public void BabyBlueHunterLabToXyz()
            {
                var knownColor = new HunterLab {
                    L = 85.308, A = -27.915, B = -13.675,
                };
                var expectedColor = new Xyz {
                    X = 58.007, Y = 72.775, Z = 105.596,
                };

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
Example #13
0
            public void BlackRgbToHunterLab()
            {
                var knownColor = new Rgb {
                    R = 0, G = 0, B = 0,
                };
                var expectedColor = new HunterLab {
                    L = 0, A = 0, B = 0,
                };

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
Example #14
0
        public void HunterLabConstructorAssignsFields()
        {
            const float l         = 75F;
            const float a         = -64F;
            const float b         = 87F;
            var         hunterLab = new HunterLab(l, a, b);

            Assert.Equal(l, hunterLab.L);
            Assert.Equal(a, hunterLab.A);
            Assert.Equal(b, hunterLab.B);
        }
Example #15
0
            public void GoldenrodRgbToHunterLab()
            {
                var knownColor = new Rgb {
                    R = 218, G = 165, B = 32,
                };
                var expectedColor = new HunterLab {
                    L = 64.746, A = 4.222, B = 38.719,
                };

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
Example #16
0
            public void BabyBlueHunterLabToRgb()
            {
                var knownColor = new HunterLab {
                    L = 85.308, A = -27.915, B = -13.675,
                };
                var expectedColor = new Rgb {
                    R = 133, G = 237, B = 255,
                };

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
Example #17
0
            public void WhiteRgbToHunterLab()
            {
                var knownColor = new Rgb {
                    R = 255, G = 255, B = 255,
                };
                var expectedColor = new HunterLab {
                    L = 100, A = -5.336, B = 5.433,
                };

                ExpectedValuesForKnownColor(knownColor, expectedColor);
            }
Example #18
0
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="CieXyz"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="CieXyz"/></returns>
        public CieXyz ToCieXyz(HunterLab color)
        {
            // Conversion
            CieXyz unadapted = HunterLabToCieXyzConverter.Convert(color);

            // Adaptation
            CieXyz adapted = color.WhitePoint.Equals(this.WhitePoint) || !this.IsChromaticAdaptationPerformed
                                 ? unadapted
                                 : this.Adapt(unadapted, color.WhitePoint);

            return(adapted);
        }
Example #19
0
        public void HunterLabEquality()
        {
            var x = default(HunterLab);
            var y = new HunterLab(Vector3.One);

            Assert.True(default(HunterLab) == default(HunterLab));
            Assert.True(new HunterLab(1, 0, 1) != default(HunterLab));
            Assert.False(new HunterLab(1, 0, 1) == default(HunterLab));
            Assert.Equal(default(HunterLab), default(HunterLab));
            Assert.Equal(new HunterLab(1, 0, 1), new HunterLab(1, 0, 1));
            Assert.Equal(new HunterLab(Vector3.One), new HunterLab(Vector3.One));
            Assert.False(x.Equals(y));
            Assert.False(x.Equals((object)y));
            Assert.False(x.GetHashCode().Equals(y.GetHashCode()));
        }
        /// <summary>
        /// Adapts <see cref="HunterLab"/> color from the source white point to white point set in <see cref="TargetHunterLabWhitePoint"/>.
        /// </summary>
        /// <param name="color">The color to adapt</param>
        /// <returns>The adapted color</returns>
        public HunterLab Adapt(HunterLab color)
        {
            if (!this.IsChromaticAdaptationPerformed)
            {
                throw new InvalidOperationException("Cannot perform chromatic adaptation, provide a chromatic adaptation method and white point.");
            }

            if (color.WhitePoint.Equals(this.TargetHunterLabWhitePoint))
            {
                return(color);
            }

            CieXyz xyzColor = this.ToCieXyz(color);

            return(this.ToHunterLab(xyzColor));
        }
        [InlineData(0.95047, 1, 1.08883, 100, 0, 0)] // D65 white point is HunterLab 100, 0, 0 (adaptation to C performed)
        public void Convert_Xyz_D65_to_HunterLab(float x, float y, float z, float l, float a, float b)
        {
            // Arrange
            CieXyz input = new CieXyz(x, y, z);
            ColorSpaceConverter converter = new ColorSpaceConverter {
                WhitePoint = Illuminants.D65
            };

            // Act
            HunterLab output = converter.ToHunterLab(input);

            // Assert
            Assert.Equal(l, output.L, FloatRoundingComparer);
            Assert.Equal(a, output.A, FloatRoundingComparer);
            Assert.Equal(b, output.B, FloatRoundingComparer);
        }
Example #22
0
        public void Adapt_HunterLab_D65_To_D50(float l1, float a1, float b1, float l2, float a2, float b2)
        {
            // Arrange
            var input    = new HunterLab(l1, a1, b1, Illuminants.D65);
            var expected = new HunterLab(l2, a2, b2);
            var options  = new ColorSpaceConverterOptions {
                TargetLabWhitePoint = Illuminants.D50
            };
            var converter = new ColorSpaceConverter(options);

            // Action
            HunterLab actual = converter.Adapt(input);

            // Assert
            Assert.Equal(expected, actual, ColorSpaceComparer);
        }
        [InlineData(100, 0, 0, 0.95047, 1, 1.08883)] // D65 white point is HunerLab 100, 0, 0 (adaptation to C performed)
        public void Convert_HunterLab_to_Xyz_D65(float l, float a, float b, float x, float y, float z)
        {
            // Arrange
            HunterLab           input     = new HunterLab(l, a, b);
            ColorSpaceConverter converter = new ColorSpaceConverter {
                WhitePoint = Illuminants.D65
            };

            // Act
            CieXyz output = converter.ToCieXyz(input);

            // Assert
            Assert.Equal(x, output.X, FloatRoundingComparer);
            Assert.Equal(y, output.Y, FloatRoundingComparer);
            Assert.Equal(z, output.Z, FloatRoundingComparer);
        }
Example #24
0
        /// ------------------------------------------------------------------------------------

        public XYZ Convert(HunterLab input)
        {
            double L = input.L, a = input.a, b = input.b;
            double Xn = input.Illuminant.X, Yn = input.Illuminant.Y, Zn = input.Illuminant.Z;

            var Ka = XYZ.ComputeKa(input.Illuminant);
            var Kb = XYZ.ComputeKb(input.Illuminant);

            var Y = (L / 100d).Power(2) * Yn;
            var X = ((a / Ka) * Math.Sqrt(Y / Yn) + Y / Yn) * Xn;
            var Z = ((b / Kb) * Math.Sqrt(Y / Yn) - Y / Yn) * (-Zn);

            var result = new XYZ(X, Y, Z);

            return(result);
        }
Example #25
0
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="YCbCr"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="YCbCr"/></returns>
        public YCbCr ToYCbCr(HunterLab color)
        {
            var xyzColor = this.ToCieXyz(color);

            return(this.ToYCbCr(xyzColor));
        }
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="CieLch"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="CieLch"/></returns>
        public CieLch ToCieLch(HunterLab color)
        {
            CieXyz xyzColor = this.ToCieXyz(color);

            return(this.ToCieLch(xyzColor));
        }
Example #27
0
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="Cmyk"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="Cmyk"/></returns>
        public Cmyk ToCmyk(HunterLab color)
        {
            var xyzColor = this.ToCieXyz(color);

            return(this.ToCmyk(xyzColor));
        }
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="CieXyy"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="CieXyy"/></returns>
        public CieXyy ToCieXyy(HunterLab color)
        {
            var xyzColor = this.ToCieXyz(color);

            return(this.ToCieXyy(xyzColor));
        }
Example #29
0
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="LinearRgb"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="LinearRgb"/></returns>
        public LinearRgb ToLinearRgb(HunterLab color)
        {
            var xyzColor = this.ToCieXyz(color);

            return(this.ToLinearRgb(xyzColor));
        }
        /// <summary>
        /// Converts a <see cref="HunterLab"/> into a <see cref="Hsl"/>
        /// </summary>
        /// <param name="color">The color to convert.</param>
        /// <returns>The <see cref="Hsl"/></returns>
        public Hsl ToHsl(HunterLab color)
        {
            var xyzColor = this.ToCieXyz(color);

            return(this.ToHsl(xyzColor));
        }