正确理解RGBA的含义

看到这个标题有人可能要喷了,这不简单,就是红绿蓝再加上透明度呗。

其实这里面有你可能会完全忽略的东西。

比如,如果屏幕上两个点的颜色分别是(1,1,1,0.8),(1,1,1,0.5),这两个点有什么不一样?

答案是两个点是完全一样的。

一般情况下,电脑的标准屏幕设备是不存在A这个分量的,A的存在只是用于我们计算。正因为A不是电脑设备的标准输出量,所以在不同的环境中RGBA表现的值并不一定是相同的。这点差异会导致最终的屏幕输出不一致的情况发生。

对于ALPHA的使用,大部分人应该都知道这个公式。

ALPHA混合后的值=(srcColor)*srcAlpha+(dstColor)*(1-srcAlpha)

注意到,对位图上的一个点来说,只要该点的颜色值不改变,srcColor*srcAlpha对那个点来说就是个常量。所以一些系统为了优化会预先把这个值乘上,结果是RGBA变成了(RA,GA,BA,A)。如果一个资源只在一个系统里显示操作,倒也没问题,但如果是系统间的切换,问题就来了。

如果你看到一个RBGA是(0.3,0.3,0.3,0.3)时,那么它究竟表示的是(0.09,0.09,0.09,0.3)还是(1,1,1,0.3)?这就得根据实际情况来了。如果RGBA是预乘的值,用alpha混合公式就会得出错误的结果,因为srcAlpha被乘了两道,图片看上去会比它本来的样子更黑一些(如果alpha只有0和1没有这个问题)。这时正确的公式应该是

(srcColor)+(dstColor)*(1-srcAlpha)



转载于:https://my.oschina.net/ueharaai/blog/151831

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值