图像上某点的颜色,用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则是窗口颜色所占分量,但是第二步适宜于计算机计算过程。
关于颜色的透明度的形象理解
最新推荐文章于 2022-12-08 23:11:16 发布