在应用半透明覆盖图后,以编程方式计算实现特定颜色所需的基本颜色

问题描述:

我正尝试创建一个工具来帮助我为Web应用程序选择颜色。基本上,我希望能够指定最终的颜色和一些覆盖参数,并确定底层颜色需要什么(或者是否可以用指定的参数实现)。在应用半透明覆盖图后,以编程方式计算实现特定颜色所需的基本颜色

所有叠加层都是半透明的黑色。

的系统将如何工作的一个例子:

  1. 我输入以下变量:
    • finalColourRed:128 [0-255]
    • finalColourGreen:118 [0-255]
    • finalColourBlue:107 [0-255]
    • overlayOpacity:0.21 [0-1]
  2. 系统返回:
    • RGB(183,169,154)

我要指出,我并不需要帮助编写实际的代码对于这一点,我只是不不知道使用的数学公式,而我的Google-fu今天很弱。我能找到的最接近的是这个很好的答案(https://*.com/a/12228643/4027341),但它缺少了一个迭代,“知道最终所需的颜色,知道覆盖颜色,知道覆盖不透明度”

您可以一次完成一个通道;公式的工作原理类似:

的最终颜色的通道将作为计算:

finalColor = originalColor * (1.0 - opacity) + overlayColor * opacity; 

在你的情况,你知道最终的色彩,覆盖的色彩和透明度;做一些代数,我们的结论是到达:

originalColor = (finalColor - overlayColor * opacity)/(1.0 - opacity); 

要知道的边缘情况,其中不透明度= 1.0;在这种情况下,您无法计算原始颜色;更具体地说,如果不透明度= 1.0,任何颜色都可以完成这项工作。

此外,公式可能会产生负值或大于255的值;这些值意味着你不能完全获得能够提供你想要的结果的颜色。

+1

绝对正确。谢谢你:) – Scoots

+0

不客气。 –