将RGBA颜色转换为RGB

如何将RGBA颜色元组(例如96、96、96、202)转换为相应的RGB颜色元组?

编辑:

我想要得到的RGB值在视觉上在白色背景上与RGBA元组最相似。


慕无忌1623718
浏览 1752回答 3
3回答

米琪卡哇伊

我赞成约翰尼斯的回答,因为他对此是正确的。*有人提出我的原始答案不正确的评论。如果alpha值与正常值相反,则可以正常工作。但是,根据定义,这在大多数情况下不起作用。因此,我更新了以下公式以适合正常情况。最终等于@hkurabko在下面的回答*但是,一个更具体的答案是将alpha值基于不透明的背景色(或称为“遮罩”)合并到实际的颜色结果中。为此有一个算法(来自此 Wikipedia链接):标准化RGBA值,使它们都在0到1之间-只需将每个值除以255即可。我们称之为结果Source。还可以对遮罩色进行归一化(黑色,白色等)。我们将结果称为“ 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)要获得最终的0-255值,Target只需将所有归一化的值乘以255,并确保在任何组合值超过1.0时将上限设置为255(这是过度曝光,并且有更复杂的算法来处理此问题涉及整个图像处理等)。编辑:在您的问题中,您说过您想要一个白色背景-在那种情况下,只需将BGColor固定为255,255,255即可。
打开App,查看更多内容
随时随地看视频慕课网APP