我必须以自然的方式混合一些颜色.这意味着
blue + yellow = green blue + red = purple
等等.我得到了RGB-Values的颜色.当我尝试混合它们时,我得到了正确的"RGB"结果
green + red = yellow yellow + blue = white
但不是正确的"天然湿涂料" - 结果.如何以自然的方式混合RGB有什么好主意?
如果有人知道Microsoft.Xna.Framework.Graphics
命名空间内的解决方案会很好,但通用解决方案也会有帮助:)
@Jay Bazuzi:
请发布一个代码示例,显示您要执行的操作.
当然 - 这是我混合两种RGB颜色的功能.
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并返回该颜色.
"天然湿漆"有点含糊不清; 建议的CMYK混合不起作用,因为你仍在添加颜色.
如果你想要像Photoshop中那样的结果(如同Jon B一样),你需要使用L*a*b*空格. 用于将RGB转换为Lab或从Lab转换的公式和描述在此处.
实验室空间是专门设计的,因此线性变化对应于人眼所感知的一定量的颜色变化.这很重要,因为我们对绿色比其他颜色更敏感,因为我们根据色调和亮度等感知不同的变化.
尝试当前正在建议的任何其他方法不仅会产生您不想要的颜色,而且也不会代表颜色的"不断变化"的变化,特别是如果您将此用于不断变化的事情,如渐变.
在http://www.codeproject.com/KB/recipes/colorspace1.aspx上有一篇很好的文章,用于在C#中将RGB转换为L a b .