Exemple #1
0
        /// <summary>
        /// 返回将 ColorX 结构表示的两种颜色在 HSL 色彩空间按指定比例线性混合得到的颜色。
        /// </summary>
        /// <param name="color1">ColorX 结构表示的第一种颜色。</param>
        /// <param name="color2">ColorX 结构表示的第二种颜色。</param>
        /// <param name="proportion">第一种颜色所占的比例,取值范围为 [0, 1] 或 (1, 100]。</param>
        /// <returns>ColorX 结构,表示将两种颜色在 HSL 色彩空间按指定比例线性混合得到的颜色。</returns>
        public static ColorX BlendByHSL(ColorX color1, ColorX color2, double proportion)
        {
            proportion = _CheckProportion(proportion);

            PointD3D hsl1 = color1.HSL;
            PointD3D hsl2 = color2.HSL;

            double deltaHue = hsl1.X - hsl2.X;

            if (deltaHue < -180)
            {
                deltaHue += 360;
            }
            else if (deltaHue > 180)
            {
                deltaHue -= 360;
            }

            double newHue = hsl2.X + deltaHue * proportion;

            if (newHue < 0)
            {
                newHue += 360;
            }
            else if (newHue >= 360)
            {
                newHue -= 360;
            }

            return(ColorX.FromHSL(newHue, hsl1.Y * proportion + hsl2.Y * (1 - proportion), hsl1.Z * proportion + hsl2.Z * (1 - proportion), color1.Opacity * proportion + color2.Opacity * (1 - proportion)));
        }