如何将RGBA颜色元组(96,96,96,202)转换为相应的RGB颜色元组?
编辑:
我想要的是获得一个RGB值,这是最相似的RGBA元组视觉上在白色背景上。
解决方法
我已经考虑了约翰内斯的答案,因为他是对的。
*有人提出几点意见,我原来的答案是不正确的。如果alpha值从正常反转,它工作。然而,根据定义,这在大多数情况下不起作用。因此,我更新了下面的公式正确的正常情况。这最终等于@ hkurabko的回答下面*
然而,更具体的答案是将α值结合到基于不透明背景颜色(或者其所指的“哑光”)的实际颜色结果中。
>规范化RGBA值,使它们都在0和1之间 – 只需将每个值除以255即可。我们将调用结果源。
>标准化也是无光泽的颜色(黑色,白色无论什么)。我们将调用结果BGColor注意 – 如果背景颜色也是透明的,那么你将不得不递归首先的过程(同样,选择一个遮罩),以获得此操作的源RGB。
>现在,转换被定义为(在这里完整的伪代码!):
Source => Target = (BGColor + Source) = Target.R = ((1 - Source.A) * BGColor.R) + (Source.A * Source.R) Target.G = ((1 - Source.A) * BGColor.G) + (Source.A * Source.G) Target.B = ((1 - Source.A) * BGColor.B) + (Source.A * Source.B)
要获取Target的最终0-255值,您只需将所有规范化值乘以255,如果任何组合值超过1.0,则确保上限为255(这是过度曝光,有更复杂的算法处理这涉及整个图像处理等)。
编辑:在你的问题,你说你想要一个白色背景 – 在这种情况下只是将BGColor固定为255,255,255。