有没有一种简单的方法来混合两个System.Drawing.Color值?

有没有一种简单的方法来混合两个System.Drawing.Color值? 或者我是否必须编写自己的方法来采用两种颜色并将它们组合起来?

如果我这样做,那怎么可能呢?

我正是为了这个目的写了一个实用工具方法。 🙂

 /// Blends the specified colors together. /// Color to blend onto the background color. /// Color to blend the other color onto. /// How much of  to keep, /// “on top of” . /// The blended colors. public static Color Blend(this Color color, Color backColor, double amount) { byte r = (byte) ((color.R * amount) + backColor.R * (1 - amount)); byte g = (byte) ((color.G * amount) + backColor.G * (1 - amount)); byte b = (byte) ((color.B * amount) + backColor.B * (1 - amount)); return Color.FromArgb(r, g, b); } 

如果要以对人眼看起来更自然的方式混合颜色,则应考虑在RGB的不同颜色空间中工作,例如L * a * b * ,HSL,HSB。

有关色彩空间的优秀代码项目文章以及C#中的示例。

您可能喜欢使用L * a * b *,因为它旨在线性化色差的感知,因此应该产生优雅的渐变。

我不完全确定你在尝试使用混合做什么,但你可以看看alpha混合http://en.wikipedia.org/wiki/Alpha_compositing 。