我必须以自然的方式混合一些颜色。这意味着
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并返回该颜色。
答案 0 :(得分:46)
“天然湿漆”有点含糊不清;建议混合使用CMYK是行不通的,因为你还在添加颜色。
如果你想要像Photoshop一样的结果(检查Jon B)你需要使用L * a * b *空格。用于将RGB转换成Lab或从Lab转换的公式和描述{{3} }。
实验室空间是专门设计的,因此线性变化对应于人眼所感知的一定量的颜色变化。这很重要,因为例如我们对绿色比其他颜色更敏感,因为我们根据色调和亮度等感知不同的变化。
尝试当前建议的任何其他方法不仅会产生您不想要的颜色,而且也不会代表颜色的“不断变化”的变化,特别是如果您将此用于不断变化的事情像一个渐变。
答案 1 :(得分:18)
有一篇很好的文章,用于在http://www.codeproject.com/KB/recipes/colorspace1.aspx的C#中将RGB转换为L a b。
答案 2 :(得分:3)
您可以使用WIC免费获得cmyk< - > rgb转换。 但它只是.NET 3.0