Answers:
数字颜色可以由三个部分组成:红色,绿色和蓝色。将它们组合在一起,就可以得到最终的颜色,例如。黄色是100%红色,100%绿色和0%蓝色。
正如您提到的,第四部分是透明度。这些共同构成了RGBA
代表图像的元组(红色,绿色,蓝色,alpha)。
现在,代替像素,换一种方式思考:如果将图像分成四层怎么办?您可以像这样将它们分开:
这些层实际上称为“通道”。它们是示例图像中的外观:
在此图像中,您只能看到红色通道上的红色像素。同样适用于绿色和蓝色。这就是全部-一种将图像视为组合在一起的单独颜色的“通道”的方式。
该术语来自“通道”的定义,它表示频谱的特定部分。在这种情况下,一种颜色的红色,绿色和蓝色分量通常称为“通道”(因为红色,绿色和蓝色光是可见光谱的一部分)。
由于alpha是计算机图形学中颜色的另一组成部分(尽管与其他可见光并不完全相关),因此它也称为通道。
Alpha通道实际上是由乔治·卢卡斯(George Lucas)的公司Industrial Light&Magic发明的(实际上Alvy Ray Smith在那儿工作时完成了大部分工作,他以前是Xerox PARC雇用的,我们几乎要感谢现代计算中的一切!)。
Alpha通道除了可以执行诸如透明窗口,透明渐变和逼真的阴影之类的炫酷效果外,还可以用于子像素操作。实际上,最初的用途是因为当时的计算机图形很烂。为了将抗锯齿的图像叠加到不同的背景(或实时电影的背景)上,您最终会出现块状边缘。这对于电影而言是行不通的,并且尝试对背景进行图像抗锯齿会占用过多的CPU时间。所以..图像的边缘变成半透明的(alpha通道)。这样可以使背景以不同的密度显示-将两个图像的颜色混合在一起以消除锯齿。如今,这种方式在任何地方都可以使用,例如,绘制的图标边缘比平常所允许的分辨率平滑得多,而您却不会
Alpha通道很容易在硬件中完成。早期的电影制作机器有一个“同步锁相”位(在Amiga和一些Atari机器上也有),它基本上是一个输出引脚,从计算机输出切换到视频输出。该引脚由输出中的“透明”位驱动(通常使用“ hicolor”图形模式,对于RGB为5:5:5,对于透明度为1位= 16位/像素),这使得可以轻松地将计算机生成的上下文覆盖在实时环境中视频而不将其数字化。后来将其修改为具有8位DAC的模拟输出-因此,与其在计算机和实时视频之间切换,不如将其混合在一起,从而消除了1位技术使用的令人讨厌的块状边缘。模拟抗锯齿!
现代视频卡可以一次在内存中存储多层信息,并使用alpha层在硬件中混合多层alpha透明度。这使您的“精灵”和其他需要进行抗锯齿的对象看起来不错。抗混叠使用Alpha通道动态混合,而不是混合成固定的背景色。当然,您可以使用Alpha通道执行各种操作,但是我希望这可以为您提供一个开始。有关更多历史记录,请尝试维基百科。
但是,没有其他示例可以解释为什么使用alpha。它来自Alpha Compositing中的表达式:
其中Ca和Cb是两个输入颜色值,Co是输出组合颜色。
在0和1之间改变alpha值可以改变前后合成图像之间的颜色。
(据我所知,图像处理也具有“伽玛”,但没有“ beta”)
像素是组件的集合。传统上,这些组件是红色,绿色和蓝色,每个组件都占用8位数据。
由于使内存按某些方式对齐通常是有利的,因此有时将这些方式打包成32位空间。这在每个像素的末尾留下了8位额外数据。由于它既不是红色,也不是绿色或蓝色,因此需要一个名称-而alpha是一个相对没有意义的名称。
现在,当您将一个像素阵列排列成一个矩形时,您将得到:
RGBARGBARGBARGBA
RGBARGBARGBARGBA
RGBARGBARGBARGBA
RGBARGBARGBARGBA
有时您只想谈论上述一种颜色,例如红色:
R***R***R***R***
R***R***R***R***
R***R***R***R***
R***R***R***R***
每个像素分量仅一个元素的这种子选择在图像中称为“通道”。由于像素具有4个分量,因此此图像具有4个通道。
还有其他没有Alpha通道的图像格式:
RGBRGBRGBRGB
RGBRGBRGBRGB
RGBRGBRGBRGB
RGBRGBRGBRGB
并且有些格式的每个像素分量的位数不同(3、5、8、16、32),有些格式的每个像素分量的位数不一致。
该通道成为仅一个像素分量的“虚拟”阵列。(我说是虚拟的,因为每个元素之间都有跨度,而传统上数组没有这种跨度)
RGB部分也没有固定-您可以使用带有或不带有alpha通道的灰度图像,可以使用CMYK图像(青色洋红色黄blacK,通常在减色空间中),可以使用具有由镜面射线追踪器或科学仪器创建的各种颜色通道。
尽管我将像素视为始终是连续的,但也可以将通道分成多个位置,如下所示:
RRRRGGGGBBBBAAAA
RRRRGGGGBBBBAAAA
RRRRGGGGBBBBAAAA
RRRRGGGGBBBBAAAA
甚至
RRRR
RRRR
RRRR
RRRR
GGGG
GGGG
GGGG
GGGG
BBBB
BBBB
BBBB
BBBB
AAAA
AAAA
AAAA
AAAA
或者将RGB打包,并将A存储在单独的缓冲区中。
这在游戏中的实时数据中并不常见,因为现代显卡通常是围绕RGBA像素设计的。可以统一处理RGB,并且可以使用A进行快速计算,从而可以在RGB像素上绘制预先绘制的背景。
alpha通道通常用于透明度信息。令人讨厌的是,不同的代码库有时将alpha的最大值视为透明的,而有时则视为不透明的。如今这种情况再少见了。Alpha通道也已用于z缓冲区排序(像素距查看器的距离)以允许无序绘制到场景,并且传统上,通过将2x 2x(或少4x像素)的低分辨率图像推入到像素中来完成mip映射。递归地显示高分辨率图像的Alpha通道。
即使在使用RGBA像素的系统中,这些像素的含义也可能不一致。R是否测量一个人看到多少红色,或者应该发射多少红色光子?这是线性和非线性色彩空间之间的差异,它影响使用透明通道合成所述像素的正确方法。