16

我正在尝试混合两个源 RGB 向量来创建第三个“结果向量”,它是前两个的直观混合。

理想情况下,我将能够模拟“真正的油漆混合特性”,但为简单起见,我试图找到一种方法,使结果看起来直观地类似于您通过组合两个源 rgb 得到的结果。

最低限度,这些特征:
红色 + 黑色 = 深红色
红色 + 白色 = 浅红色

最佳,也具有真实的油漆特性:
红色 + 蓝色 = 紫色
红色 + 黄色 = 橙色
(等)

--

我目前正在通过添加两个源 RGB 向量/255,然后归一化(并乘以 255)来执行此“懒惰方式”。所以,使用这个:[Red = <1,0,0> * 255] + [Blue = <0,0,1> * 255] 给出 Magenta=<1,0,1>/sqrt(2) * 255,虽然其他颜色不太直观甚至不可见......我需要一个更好的方法!请帮忙 :-)

4

5 回答 5

15

您的建议与加权平均值相同吗?

平均 R = w1*R1 + w2*R2 + w3*R3 + ... + wn*Rn

平均 G = w1*G1 + w2*G2 + w3*G3 + ... + wn*Gn

平均 B = w1*B1 + w2*B2 + w3*B3 + ... + wn*Bn

w 是加权分数,它们的总和为 1。

例如,R1 是要混合的第一种颜色的红色分量。

所以如果你想均匀混合两种颜色,那就是:

平均 R = 0.5*R1 + 0.5*R2

平均 G = 0.5*G1 + 0.5*G2

平均 B = 0.5*B1 + 0.5*B2

至于将结果颜色映射到命名颜色(“深红色”),也许只是做一个查找表并选择最接近的颜色?

于 2009-12-12T02:22:00.707 回答
11

问题是您试图将两种不同的颜色理论联系起来。RGB 是加色理论(有色光是从光源发出的)。在这种情况下,您添加到混合中的光谱越多,您就越接近白色。

对于“油漆混合”,您需要模拟控制反射颜色混合方式的减色理论。(即反射光,如油漆、不同的表面等)这是一个概述

此页面上的 JavaScript是关于如何将 RGB 转换为 CMYK 的线索。

于 2009-12-12T02:35:36.520 回答
2

可以通过将 RGB 值转换为光谱反射曲线,然后在此处进行混合来混合 RGB 颜色以模拟减色混合(即类似油漆的混合)。这个问题与另一个问题stackoverflow.com/questions/10254022/非常相似,其中更详细地讨论了解决方案。

于 2015-04-30T12:12:16.927 回答
1

我认为你真的应该在你的配色方案中定义什么是“+”。

根据您的要求,我已将它们翻译成估计的十六进制颜色代码(可以轻松推断出 rgb 表示)。

红色 + 黑色 = 深红色  
#ff0000 + #000000 = #800000
红色 + 白色 = 浅红色
#ff0000 + #ffffff = #ff8080

最佳,也具有真实的油漆特性:
红色 + 蓝色 = 紫色
#ff0000 + #0000ff = #800080
红色 + 黄色 = 橙色
#ff0000 + #ffff00 = #ff8000

我没有看到一个明确的模式,你可以制定一些公式来实现这一点。

John 和 Nils 的方法可能会接近颜色,但可能不会接近精确值。我建议你试试他们的。

编辑:
更新了错误的颜色代码。好吧,它现在确实更有意义了。

于 2009-12-12T02:34:45.023 回答
0

//您可以手动编码以返回。

    function returnColour(clrRed, clrBlack){
        var clrRed:"#ff0000";
        var clrBlack:"#000000";
        var clrDarkRed:"#800000";
        if ( this.currentColor !== clrRed ) {
          return;
               }
          elseif (clrRed + clrBlack){ 
                 return clrDarkRed;
          }
    }

//只是一种相当愚蠢的方式的概念证明。数学方法会很有用!只是没有时间解决这个问题,尽管考虑了一段时间。

于 2020-12-15T13:48:44.260 回答