コード例 #1
0
        /// <summary>
        /// Adapts linear RGB color from the source working space to working space set in <see cref="TargetRGBWorkingSpace"/>.
        /// </summary>
        public LinearRGBColor Adapt(LinearRGBColor color)
        {
            if (color == null)
            {
                throw new ArgumentNullException("color");
            }

            if (!IsChromaticAdaptationPerformed)
            {
                throw new InvalidOperationException("Cannot perform chromatic adaptation, provide chromatic adaptation method and white point.");
            }

            if (color.WorkingSpace.Equals(TargetRGBWorkingSpace))
            {
                return(color);
            }

            // conversion to XYZ
            var      converterToXYZ = GetLinearRGBToXYZConverter(color.WorkingSpace);
            XYZColor unadapted      = converterToXYZ.Convert(color);

            // adaptation
            XYZColor adapted = ChromaticAdaptation.Transform(unadapted, color.WorkingSpace.WhitePoint, TargetRGBWorkingSpace.WhitePoint);

            // conversion back to RGB
            var            converterToRGB = GetXYZToLinearRGBConverter(TargetRGBWorkingSpace);
            LinearRGBColor result         = converterToRGB.Convert(adapted);

            return(result);
        }
コード例 #2
0
        public LinearRGBColor ToLinearRGB(XYZColor color)
        {
            if (color == null)
            {
                throw new ArgumentNullException("color");
            }

            // adaptation
            XYZColor adapted = TargetRGBWorkingSpace.WhitePoint.Equals(WhitePoint) || !IsChromaticAdaptationPerformed
                ? color
                : ChromaticAdaptation.Transform(color, WhitePoint, TargetRGBWorkingSpace.WhitePoint);

            // conversion to linear RGB
            var            xyzConverter = GetXYZToLinearRGBConverter(TargetRGBWorkingSpace);
            LinearRGBColor result       = xyzConverter.Convert(adapted);

            return(result);
        }
コード例 #3
0
        public LuvColor ToLuv(XYZColor color)
        {
            if (color == null)
            {
                throw new ArgumentNullException("color");
            }

            // adaptation
            XYZColor adapted = !WhitePoint.Equals(TargetLuvWhitePoint) && IsChromaticAdaptationPerformed
                ? ChromaticAdaptation.Transform(color, WhitePoint, TargetLuvWhitePoint)
                : color;

            // conversion
            var      converter = new XYZToLuvConverter(TargetLuvWhitePoint);
            LuvColor result    = converter.Convert(adapted);

            return(result);
        }
コード例 #4
0
        /// <summary>
        /// Performs chromatic adaptation of given XYZ color.
        /// Target white point is <see cref="WhitePoint"/>.
        /// </summary>
        public XYZColor Adapt(XYZColor color, XYZColor sourceWhitePoint)
        {
            if (color == null)
            {
                throw new ArgumentNullException("color");
            }
            if (sourceWhitePoint == null)
            {
                throw new ArgumentNullException("sourceWhitePoint");
            }

            if (!IsChromaticAdaptationPerformed)
            {
                throw new InvalidOperationException("Cannot perform chromatic adaptation, provide chromatic adaptation method and white point.");
            }

            XYZColor result = ChromaticAdaptation.Transform(color, sourceWhitePoint, WhitePoint);

            return(result);
        }