颜色透明度

来源:互联网 发布:手机互刷软件 编辑:程序博客网 时间:2024/04/30 01:40
 图像上某点的颜色,用RGB表示法表示时一般指出RGB各个分量的取值(取值范围是0~255)。但是还有一种表示法是RGBA,关于这个A可能有些人就要糊涂半天了,可能要问,某点的颜色不是由RGB三原色构成么?难不成这个A也是原色之一么?。
    当然,吾鄙陋之至,也算作其中一员,糊涂了两年多。再次接触,是在指定窗口的颜色时,要指定其背景色,经过一番思考,至今算是清楚了一点^^。
    记得当初学到图形学时,一本书中提到这个A是图像融合时用的,这个A被称之为Alpha通道。当时融合算是学会了,但只是知道公式而已,觉得这个透明度确实只是在两幅图融合时使用,但是为什么称之为透明度,则不甚了了。 
    先从我们日常生活中的例子说明透明度的概念。假设有一个透明玻璃箱,里面装满了清水,称之为物体B;还有发光体太阳,称之为物体A;看清这个水箱,还得有人得眼睛,称之为物体C。光的路径是,物体A发出光,光穿过B,到达C。此时B(即水)是无色的,完全透明,C看到的B的颜色取决于光的颜色—白色,我们认为看到的颜色是A的颜色,A的颜色在看到的颜色中所占分量是1,B的颜色在看到的颜色中所占分量是0。
    现在往水里注入一定量的深蓝墨水,C再次观察B,观察到的颜色是蓝色,介于白色和深蓝之间,即发生A的颜色和物体B的颜色融合,观察到的颜色是一种介于A颜色和B颜色之间的颜色,A的颜色在看到的颜色中所占分量是a(0 < a < 1),B的颜色在看到的颜色中所占分量是b(0 < b < 1),且a加b之和为1。
    继续往玻璃箱中注入深蓝墨水,直至饱和为止,C再次观察B,其颜色是一种近乎黑色的深蓝色,此时可以认为观察到的颜色是物体B的颜色,A的颜色在看到的颜色中所占分量是0,B的颜色在看到的颜色中所占分量是1。
    如果透明度范围是0~1,可以认为水的透明度是0,饱和状态的深蓝水的透明度是1,则非饱和状态的蓝色水的透明度是一个大于0而小于1的小数。如果透明范围是0~255,则完全透明时透明度是0,不透明时透明度是255,不完全透明时透明度是一个大于0小于255的数。
    话题再次转回窗口的颜色,绘制窗口时要指定窗口的颜色,假设现在的窗口数目是2,一个是背景,另一个是将要创建出来的窗口。如果认为背景是一个发光物体,而窗口指定的颜色值为RGBA格式,即有一定透明度,则最终用户看到的窗口颜色,即窗口绘制完成时的颜色则是二者颜色融合的结果,实质就是图像融合。
    如果背景颜色是(R0,G0,B0),前景色是(R1,G1,B1),透明度是Alpha,显示器上显示的窗口颜色是(R,G,B),其计算过程如下:
    R   =   R0   * (255-Alpha)/255   +   R1 * Alpha/255 =    R0   +   (R1 - R0) * Alpha/255
    G   =   G0   * (255-Alpha)/255   +   G1 * Alpha/255 =    G0   +   (G1 - G0) * Alpha/255
    B   =   B0   * (255-Alpha)/255   +   B1 * Alpha/255 =    B0   +   (B1 - B0) * Alpha/255 
    上面这个计算过程是一个线性计算过程。各个颜色分量的计算过程中,我认为第一步是最好理解的,(255-Alpha)/255代表了背景色所占分量,Alpha/255则是窗口颜色所占分量,但是第二步适宜于计算机计算过程。
0 0
原创粉丝点击