48

我必须以自然的方式混合一些颜色。这表示

blue + yellow = green 
blue + red = purple

等等。我将颜色作为 RGB 值。当我尝试混合它们时,我得到了正确的“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 并返回该颜色。

4

2 回答 2

47

“天然湿漆”有点暧昧;建议的 CMYK 混合不起作用,因为您仍在添加颜色。

如果您想要 Photoshop 中的结果(正如 Jon B 检查的那样),您需要使用 L*a*b* 空间。 RGB 与 Lab 之间的转换公式和说明在这里

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

尝试当前建议的任何其他方法不仅会产生您不想要的颜色,而且不会代表颜色的“恒定外观”变化,特别是如果您将其用于恒定变化很重要的东西,例如渐变.

于 2008-12-29T18:28:26.787 回答
3

您可以使用WIC免费获得 cmyk<->rgb 转换。但它只是 .NET 3.0

于 2008-12-29T18:37:15.940 回答