예제 #1
0
        /// <summary>
        /// Convert an RGB color to xyY and XYZ, using a color matrix and a power-law gamma function.
        /// </summary>
        /// <param name="rgb">RGB color to convert</param>
        /// <param name="matrix">RGB to XYZ color matrix</param>
        /// <param name="gamma">Gamma exponent</param>
        /// <param name="xyY">Variable to store xyY result</param>
        /// <param name="XYZ">Variable to store XYZ result</param>
        public static void fromRGB(ColorVector rgb, ColorMatrix matrix, double gamma, out ColorVector xyY, out ColorVector XYZ)
        {
            ColorVector gammafied = rgb.Power(gamma);

            XYZ = matrix.Multiply(gammafied);
            xyY = XYZtoxyY(XYZ);
        }
예제 #2
0
        /// <summary>
        /// Convert an XYZ color to xyY and RGB, using a color matrix and a power-law gamma function.
        /// </summary>
        /// <param name="XYZ">XYZ color to convert</param>
        /// <param name="inverse">XYZ to RGB color matrix</param>
        /// <param name="gamma">Gamma exponent</param>
        /// <param name="rgb">Variable to store RGB result</param>
        /// <param name="xyY">Variable to store xyY result</param>
        public static void fromXYZ(ColorVector XYZ, ColorMatrix inverse, double gamma, out ColorVector rgb, out ColorVector xyY)
        {
            xyY = XYZtoxyY(XYZ);
            ColorVector gammafied = inverse.Multiply(XYZ);

            gammafied.MaxLocal(0.0);
            rgb = gammafied.Power(1.0 / gamma);
        }
예제 #3
0
        /// <summary>
        /// Convert an xyY color to XYZ and RGB, using a color matrix and a power-law gamma function.
        /// </summary>
        /// <param name="xyY">xyY color to convert</param>
        /// <param name="inverse">XYZ to RGB color matrix</param>
        /// <param name="gamma">Gamma exponent</param>
        /// <param name="rgb">Variable to store RGB result</param>
        /// <param name="XYZ">Variable to store XYZ result</param>
        public static void fromxyY(ColorVector xyY, ColorMatrix inverse, double gamma, out ColorVector rgb, out ColorVector XYZ)
        {
            XYZ = xyYtoXYZ(xyY);
            ColorVector gammafied = inverse.Multiply(XYZ);

            gammafied.MaxLocal(0.0);
            rgb = gammafied.Power(1.0 / gamma);
        }
예제 #4
0
        /// <summary>
        /// <para>Convert a hue,luminance,saturation value to RGB, xyY and XYZ, using a color matrix (and its inverse) and a power-law gamma function.</para>
        /// <para>Steps taken by this function:</para>
        /// <list type="number">
        /// <item>Hue (RGB) color is multiplied by the luminance.</item>
        /// <item>Power-law gamma function applied (color^gamma).</item>
        /// <item>Color is converted from RGB to XYZ using the matrix.</item>
        /// <item>XYZ is converted to xyY.</item>
        /// <item>Saturation is applied to the xyY color, moving it a certain percentage to the xyY white point defined by the matrix. This value is stored in the xyY out variable.</item>
        /// <item>The saturated xyY is converted back to XYZ, and stored in the XYZ out variable.</item>
        /// <item>The saturated XYZ is converted back to RGB using the inverse matrix.</item>
        /// <item>The RGB color is gamma corrected using the inverse gamma (color^(1/gamma)). This value is stored in the rgb out variable.</item>
        /// </list>
        /// </summary>
        /// <param name="hue">Hue (color) to convert (build-in luminance should be 1)</param>
        /// <param name="luminance">Luminance of the color</param>
        /// <param name="saturation">Saturation to apply</param>
        /// <param name="matrix">RGB to XYZ color matrix</param>
        /// <param name="inverse">XYZ to RGB color matrix</param>
        /// <param name="gamma">Gamma exponent</param>
        /// <param name="rgb">Variable to store RGB result</param>
        /// <param name="xyY">Variable to store xyY result</param>
        /// <param name="XYZ">Variable to store XYZ result</param>
        public static void fromHSL(ColorVector hue, double luminance, double saturation, ColorMatrix matrix, ColorMatrix inverse, double gamma, out ColorVector rgb, out ColorVector xyY, out ColorVector XYZ)
        {
            ColorVector luminanced = hue.Multiply(luminance);
            ColorVector gammafied  = luminanced.Power(gamma);
            ColorVector usXYZ      = matrix.Multiply(gammafied);
            ColorVector usxyY      = XYZtoxyY(usXYZ);

            xyY = SaturatexyY(usxyY, saturation, matrix);
            XYZ = xyYtoXYZ(xyY);
            ColorVector sgammafied = inverse.Multiply(XYZ);

            sgammafied.MaxLocal(0.0);
            rgb = sgammafied.Power(1.0 / gamma);
        }