/// <summary> /// 返回将 ColorX 结构表示的两种颜色在 HSV 色彩空间按指定比例线性混合得到的颜色。 /// </summary> /// <param name="color1">ColorX 结构表示的第一种颜色。</param> /// <param name="color2">ColorX 结构表示的第二种颜色。</param> /// <param name="proportion">第一种颜色所占的比例,取值范围为 [0, 1] 或 (1, 100]。</param> /// <returns>ColorX 结构,表示将两种颜色在 HSV 色彩空间按指定比例线性混合得到的颜色。</returns> public static ColorX BlendByHSV(ColorX color1, ColorX color2, double proportion) { proportion = _CheckProportion(proportion); PointD3D hsv1 = color1.HSV; PointD3D hsv2 = color2.HSV; double deltaHue = hsv1.X - hsv2.X; if (deltaHue < -180) { deltaHue += 360; } else if (deltaHue > 180) { deltaHue -= 360; } double newHue = hsv2.X + deltaHue * proportion; if (newHue < 0) { newHue += 360; } else if (newHue >= 360) { newHue -= 360; } return(ColorX.FromHSV(newHue, hsv1.Y * proportion + hsv2.Y * (1 - proportion), hsv1.Z * proportion + hsv2.Z * (1 - proportion), color1.Opacity * proportion + color2.Opacity * (1 - proportion))); }