我有一种代表光线的RGB颜色。我正在寻找一种算法,以模拟(或类似)照明的方式在任意背景(例如,可能是图像)上绘制它。
一些例子:
RGB =#888888表示50%强度的白光
RGB =#ff0000表示100%强度的红光
RGB =#000000表示无光。在任何背景上绘画都不应该有效。
我希望我能够将(一组)RGBA颜色中的原始RGB颜色转换为可以在背景上绘制的颜色。我一直在寻找一种算法,并使用HSL,HSB,alpha等,但无法找到实现这一目标的通用方法。
是否有通用算法来实现我的目标?
更新:我知道this question,但我不认为这是重复的(尽管名称相似)。该问题的接受答案描述了与此场景(灯光)不匹配的行为(红色+黑色=深红色)。我特意寻找一种模拟(彩色)照明的算法。
答案 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
根据需要显示浅红色。