【发布时间】:2016-03-01 18:06:23
【问题描述】:
我有一个代表光的 RGB 颜色。我正在寻找一种算法,以模拟(或类似)照明的方式在任意背景(例如,可能是图像)上绘制它。
一些例子:
-
RGB=#888888 表示强度为 50% 的白光
- 在白色 (#ffffff) 背景像素上绘制此图将无济于事
- 在黑色 (#000000) 背景像素上绘制此图将绘制为 #888888
- 将其绘制在红色 (#ff0000) 背景像素上会导致“较浅的红色”
-
RGB=#ff0000 表示 100% 强度的红光
- 在白色 (#ffffff) 背景像素上绘制应该会产生“浅红色”(红色和白色的混合)
- 在黑色 (#000000) 背景像素上绘制此图将绘制为 #880000
RGB=#000000 表示没有光。在任何背景上绘画都应该没有效果。
我希望能够将原始 RGB 颜色转换为(一组)RGBA 颜色,以便在背景上绘制。我一直在为此寻找一种算法并使用 HSL、HSB、alpha 等,但找不到实现此目的的通用方法。
是否有通用算法来实现我想要的?
更新:我知道this question,但我不认为这是重复的(尽管名称相似)。该问题的公认答案描述了与此场景(照明)不匹配的行为(红色 + 黑色 = 深红色)。我正在专门寻找一种算法来模拟(彩色)照明。
【问题讨论】:
-
您是否尝试将每种颜色相加并除以二?除了#888888 超过#ffffff 之外,它将满足所有这些示例,但我认为正确的行为(基于其他示例)应该是#c3c3c3,这也是和除法。
-
@Panda 我不认为这是重复的。我已编辑问题以解释原因。
-
如果是用光绘画,那么在白色背景上绘画红色应该会产生白色——除非你减去光。如果这是正确的,并且您永远不想减去光,那么您所需要的只是加法混合:总结颜色并限制在有效范围内。
-
@Ike 如果我在环境光下有一堵白墙并在上面放红灯,我会认为它是“红色的”。
标签: algorithm image-processing graphics colors rgb