Math 混合两个RGB颜色向量以获得结果

Math 混合两个RGB颜色向量以获得结果,math,colors,rgb,vector,paint,Math,Colors,Rgb,Vector,Paint,我试图混合两个源RGB向量来创建第三个“合成向量”,这是前两个向量的直观混合 理想情况下,我将能够模拟“真实的绘画混合特征”,但为了简单起见,我正在尝试找到一种方法,在这种方法中,合成的效果直观地与您从组合两个源rgb中得到的效果类似 至少,这些特征: 红色+黑色=深红色 红色+白色=浅红色 最佳情况下,也具有真实的油漆特性: 红色+蓝色=紫色 红色+黄色=橙色 (等) -- 我现在用“惰性方式”将两个源RGB向量/255相加,然后进行规格化(并乘以255)。 因此,使用这个:[Red=*255

我试图混合两个源RGB向量来创建第三个“合成向量”,这是前两个向量的直观混合

理想情况下,我将能够模拟“真实的绘画混合特征”,但为了简单起见,我正在尝试找到一种方法,在这种方法中,合成的效果直观地与您从组合两个源rgb中得到的效果类似

至少,这些特征:
红色+黑色=深红色
红色+白色=浅红色

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

--

我现在用“惰性方式”将两个源RGB向量/255相加,然后进行规格化(并乘以255)。
因此,使用这个:[Red=*255]+[Blue=*255]可以得到洋红=/sqrt(2)*255,尽管其他颜色不太直观,甚至不可见。。。我需要一个更好的方法!请帮助:-)

您建议的加权平均值是否相同

Average R = w1*R1 + w2*R2 + w3*R3 + ... + wn*Rn Average G = w1*G1 + w2*G2 + w3*G3 + ... + wn*Gn Average B = w1*B1 + w2*B2 + w3*B3 + ... + wn*Bn 平均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是要混合的第一种颜色的红色成分

因此,如果您想将两种颜色均匀混合,应该是:

Average R = 0.5*R1 + 0.5*R2 Average G = 0.5*G1 + 0.5*G2 Average B = 0.5*B1 + 0.5*B2 平均R=0.5*R1+0.5*R2 平均G=0.5*G1+0.5*G2 平均B=0.5*B1+0.5*B2
至于将结果颜色映射到命名颜色(“暗红色”)的问题,也许只需做一个查找表并选择最接近的颜色?

我认为您应该真正定义颜色方案中的“+”是什么

根据您的要求,我已将它们转换为估计的十六进制颜色代码(rgb表示可以很容易地推导出来)

红色+黑色=深红色 #ff0000+#000000=#800000 红色+白色=浅红色 #ff0000+#ffffff=#ff8080 最佳情况下,还具有真实的油漆特性: 红色+蓝色=紫色 #ff0000+#0000ff=#800080 红色+黄色=橙色 #ff0000+#ffff00=#ff8000 我看不出一个明确的模式,你可以通过一些公式来实现这一点

约翰和尼尔斯的方法可能会接近颜色,但可能不会接近精确值。我建议你试试他们的

编辑:

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

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

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


上的JavaScript是如何将RGB转换为CMYK的一条线索。

混合RGB颜色以模拟减色混合(即,类似油漆的混合),可以通过将RGB值转换为光谱反射曲线,然后在那里进行混合来完成。这个问题与另一个问题非常相似,解决方案将更详细地讨论。

//您可以手动编写代码返回

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

//只是用一种相当愚蠢的方式来证明概念。数学方法会有用的!虽然思考了一段时间,但还没来得及考虑这个问题。

如何确定w或w矩阵,使其能够像油漆一样混合rgb(或cmyk)?如果混合两种颜色,w是1/2或0.5,正如答案所示。很清楚,如果权重相等,可以将其保留,然后将结果除以混合的颜色数((R1+R2+R3)/3)。当它们不相等时,它们的总和应等于
1
。关键是要得到一个平均值。看起来和你差不多。你可能不想要“真实的绘画”特征,因为真实的绘画没有你想象的那么好。我敢打赌你会认为黄色+蓝色=绿色,但在我所知道的任何颜色空间中都不是这样。我来晚了一点,但这里有一个实现可能会起作用。黄色加上蓝色确实会在添加颜色的情况下变成绿色,这就是混合油漆的方法。显示器使用减法颜色,软件倾向于反映这一点。是的,如果你固定黄色=#ffff00和橙色=#ff8000和浅红色=#ff8080,图案就会变得清晰。问题是关于油漆混合,但示例似乎都与RGB混合有关。我发现CMYK混合非常违反直觉。我将问题解释为混合RGB(加法),但得到CMYK(减法)结果。
    function returnColour(clrRed, clrBlack){
        var clrRed:"#ff0000";
        var clrBlack:"#000000";
        var clrDarkRed:"#800000";
        if ( this.currentColor !== clrRed ) {
          return;
               }
          elseif (clrRed + clrBlack){ 
                 return clrDarkRed;
          }
    }