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



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

一些例子:

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

    • 将其绘制在白色(#ffffff)背景像素上不会有任何作用
    • 将其绘制在黑色(#000000)背景像素上会绘制为#888888
    • 将其绘制在红色(#ff0000)背景像素上会产生"较浅的红色"
  • RGB=#ff0000表示100%强度下的红光

    • 将其绘制在白色(#ffffff)背景像素上应该会产生"浅红色"(红色和白色的混合)
    • 将其绘制在黑色(#000000)背景像素上会绘制为#88000
  • RGB=#000000表示没有灯光。在任何背景上画这个都不会有任何效果。

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

有没有一个通用的算法来实现我想要的?

更新:我知道这个问题,但我不认为这是重复的(尽管名称相似)。该问题的公认答案描述了与该场景(照明)不匹配的行为(红色+黑色=深红色)。我正在专门寻找一种算法来模拟(彩色)照明。

如果以十进制形式查看值,则其值范围为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

根据需要为浅红色。

最新更新