表示光的RGB颜色的添加混合

时间:2015-11-27 14:03:12

标签: algorithm image-processing graphics colors rgb

我有一种代表光线的RGB颜色。我正在寻找一种算法,以模拟(或类似)照明的方式在任意背景(例如,可能是图像)上绘制它。

一些例子:

  • RGB =#888888表示50%强度的白光

    • 将此绘制为白色(#ffffff)背景像素无效
    • 将此绘制为黑色(#000000)背景像素将绘制为#888888
    • 在红色(#ff0000)背景像素上绘制这样会导致“浅红色”
  • RGB =#ff0000表示100%强度的红光

    • 在白色(#ffffff)背景像素上绘画应该会产生“浅红色”(红色和白色混合)
    • 将此绘制为黑色(#000000)背景像素将绘制为#880000
  • RGB =#000000表示无光。在任何背景上绘画都不应该有效。

我希望我能够将(一组)RGBA颜色中的原始RGB颜色转换为可以在背景上绘制的颜色。我一直在寻找一种算法,并使用HSL,HSB,alpha等,但无法找到实现这一目标的通用方法。

是否有通用算法来实现我的目标?

更新:我知道this question,但我不认为这是重复的(尽管名称相似)。该问题的接受答案描述了与此场景(灯光)不匹配的行为(红色+黑色=深红色)。我特意寻找一种模拟(彩色)照明的算法。

1 个答案:

答案 0 :(得分:1)

如果您将值视为十进制,则值的范围为0-255。您可以将两种颜色相加,然后将它们重新缩放回范围。

FF0000 + FFFFFF 
= 255,0,0 + 255,255,255 
= 510,255,255

然后按255/510缩放到

510 * 255/510, 255 * 255/510, 255 * 255/510
= 255, 127, 127

根据需要显示浅红色。