如何将颜色“自然地”与C#混合?

我必须以自然的方式混合一些颜色。 意即

blue + yellow = green blue + red = purple 

等等。 我得到了RGB值的颜色。 当我尝试混合他们时,我得到了正确的“RGB” – 结果

 green + red = yellow yellow + blue = white 

但不是正确的“天然湿漆”的结果。 任何好主意如何自然地混合RGB?

如果有人知道Microsoft.Xna.Framework.Graphics命名空间中的解决scheme,但是一个通用的解决scheme也将有助于:)


@Jaz Bazuzi:

请发布一个代码示例,显示您正在尝试执行的操作。

当然 – 这是我混合两种RGB颜色的function。

 public Color colorMixer(Color c1, Color c2) { int _r = Math.Min((c1.R + c2.R),255); int _g = Math.Min((c1.G + c2.G),255); int _b = Math.Min((c1.B + c2.B),255); return new Color(Convert.ToByte(_r), Convert.ToByte(_g), Convert.ToByte(_b)); } 

到目前为止,在这个线程中读到的是非常有前途的 – 我将C1和C2转换为L a b *,混合它们 – 将其转换回RGB并返回该颜色。

“天然油漆”有点含糊; build议混合CMYK将无法正常工作,因为您仍在添加颜色。

如果你想要像Photoshop一样的结果(如Jon B检查),你需要使用L * a * b *空间。 将RGB转换成Lab的公式和描述在这里 。

实验室空间是专门devise的,使线性变化对应于人眼所感知的一定量的颜色变化。 这很重要,因为我们比其他颜色对绿色更敏感,因为我们根据色调和亮度等不同而感知到不同的变化。

尝试目前build议的其他方法不仅会导致你不想要的颜色,而且也不会代表一个“恒定的”颜色变化,特别是当你用这个方法来处理像梯度一样的不断变化。

在C#中有一篇关于将RGB转换为L a b的好文章, url是http://www.codeproject.com/KB/recipes/colorspace1.aspx

用WIC免费获得cmyk < – > rgb转换。 但它只是.NET 3.0