为了账号安全,请及时绑定邮箱和手机立即绑定

将RGBA颜色转换为RGB

将RGBA颜色转换为RGB

慕无忌1623718 2019-12-18 16:47:37
如何将RGBA颜色元组(例如96、96、96、202)转换为相应的RGB颜色元组?编辑:我想要得到的RGB值在视觉上在白色背景上与RGBA元组最相似。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我赞成约翰尼斯的回答,因为他对此是正确的。


*有人提出我的原始答案不正确的评论。如果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即可。


查看完整回答
反对 回复 2019-12-18
  • 3 回答
  • 0 关注
  • 1738 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信