/// <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))); }