博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正确理解RGBA的含义
阅读量:6896 次
发布时间:2019-06-27

本文共 712 字,大约阅读时间需要 2 分钟。

hot3.png

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

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

比如,如果屏幕上两个点的颜色分别是(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

你可能感兴趣的文章
sqlite3 小结
查看>>
linux 简单命令
查看>>
深入围观MaskEdit组件
查看>>
鱼油账号记录程序
查看>>
表单验证插件——validate
查看>>
【1500】Message Flood (SDUTOJ)
查看>>
Tomcat启动一闪而过
查看>>
递增的三元子序列
查看>>
预定义数组(超全局数组变量)
查看>>
吃了一惊!
查看>>
Tableau 字段及文件
查看>>
【FPGA】xilinx IOBUF的用法
查看>>
快捷键/光标
查看>>
AIX装机问题123
查看>>
gitconfig 配置文件[credential]使用记录
查看>>
CentOS Redhat Linux安装 Oracle Client 的注意点
查看>>
最短路
查看>>
vs2010 调试快捷键
查看>>
Java中的Timer和TimerTask来实现多线程
查看>>
小白学习appium之如何安装apk
查看>>