alpha和color key

Posted hellokitty2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了alpha和color key相关的知识,希望对你有一定的参考价值。

一、alpha

1.透明度,一般取值0-255

2.Alpha 通道: 
   Alpha 通道是为保存选择区域而专门设计的通道。在生成一个图像文件时,并不必须产生 Alpha 通道。通常它是由人们在图像处理过程中人为生成,并从中读取选择区域信息的。因此在输出制版时, Alpha 通道会因为与最终生成的图像无关而被删除。但也有     时,比如在三维软件最终渲染输出的时候,会附带生成一张 Alpha 通道,用以在平面处理软件中作后期合成。除了 photoshop 的文件格式 PSD 外, GIF 与 TIFF 格式的文件都可以保存 Alpha 通道。而 GIF 文件还可以用 Alpha 通道作图像的去背景处理。因       此,我们可以利用 GIF 文件的这一特性制作任意形状的图形。

3.Alpha通道的概念与功能

 在计算机图形学中,一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附          加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道

    Alpha通道使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色(值为255)的Alpha像素用以定义不透明的彩色像素,而黑色(值为0)的Alpha通道像素用以定义透明像素,介于黑白之间的灰度(值为30-255)的Alpha像素用以定义不同程度       的半透明像素。因而通过一个32位总线的图形卡来显示带Alpha通道的图形,就可能呈现出透明或半透明的视觉效果。

    3.1.一个透明或半透明图形的数学模型应当如下:
    为了便于下面的分析,设Alpha值[0,255]区间映射为[0,1]区间相对应的值表示,即Alpha值为0—1之间的数值。则图形文件中各个像素点可表示为:
    Graphx(Redx,Greenx,Bulex,Alphax)
    屏幕上相应像素点的显示值就转换为:
    Dispx(Redx*Alphax,Greenx*Alphax,Bluex*Alphax)
    Alpha通道不仅用于单个图形的透明或半透明显示,更重要的是在图像合成中被广泛运用。

4.根据Alpha通道数据进行图像混合的算法:
    事实上,我们把需要组合的颜色计算出不含Alpha分量的原始RGB分量然后相加便可。如:两幅图像分别为A和B,由这两幅图像组合而成的图像称为C,则可用如下四元组表示图A和B,三元组表示图像C:
    A:(Ra,Ga,Ba,Alphaa)
    B:(Rb,Gb,Bb,Alphab)
    C:(Rc,Gc,Bc)
    根据上述算法,则:
    Rc=Ra*Alphaa+Rb*Alphab
    Gc=Ga*Alphaa+Gb*Alphab
    Bc=Ba*Alphaa+Bb*Alphab
    这就是两图像混合后的三原色分量。如果有多幅图像需要混合,则按照以上方法两幅两幅地进行混合。

5.图像处理软件Photoshop中的Alpha通道
   在图像处理软件Photoshop中,通道是一个最为基本的概念,颜色通道代表了该图像的主要色彩信息,附加通道有用于印刷的专色通道和存储、修改选取区域的Alpha通道。
   通常情况下,单独创建的新通道就是Alpha通道,这个通道并不存储图像的色彩,而是将选择域作为8位灰度图像存放并被加入到图像的颜色通道中。因而Alpha通道的内容代表的不是图像的颜色,而是选择区域,其中的白色表示完全选取区域,黑色为非选取      区域,不同层次的灰度代表不同的选取百分率,最多可有256级灰阶。
   对Alpha通道内容的操作,即是创建、存储、修改我们所需要的选取区域。如在目标图层上载入该选区(即运用该Alpha通道)便可实现任意层次的选取。通过多个Alpha通道之间的计算或Alpha通道与图层的合成便能够产生许多特殊的效果。因此,Alpha通道      功能可以说是Photoshop编辑合成多媒体作品中所使用的背景图片、主题图片、按钮、导航标志等素材的一大法宝。

6.Alpha通道在动画创作软件中的应用
   Alpha通道无论是在二维动画软件还是三维动画软件中都有广泛的应用。
  大家熟知的3DMAX动画软件中提供了动画作品后期合成的工作环境(即VIDEO POST),利用VIDEO POST的图像合成功能可以实现一次处理许多不同层次的图像文件与动画场景合成的设定。其中使用最频繁的合成方式Alpha  composing就是靠Alpha通道来     实现的。
  3DMAX能根据文件的输出格式产生包含Alpha通道的32位文件格式(特别是32位的Targa图像文件)。当进行渲染时,任何不含物体的区域的Alpha值为0,实色的物体的Alpha值为255,而透明材质的Alpha值介于0~255间。利用3DMAX的这一特性可在该软件     或其它软件中实现各种透明重叠的图像或动画效果。
  Flash矢量动画中同样具有Alpha通道功能的运用。Alpha是Flash动画场景中图形符号(graphic)的一个主要属性,改变其值(0~100之间)便可改变对象符号的透明程度。如在各关键帧设定某图形符号以不同的Alpha值,则该图形符号就呈现出动态变化的透明效果。通过编写动作脚本(Action scripting),用户交互式地改Alpha值,更能使动画作品生动有趣。

7.利用Alpha通道在视频编辑软件中实现高叠轨道的透明合成
   在视频处理软件中,通常要将多个视频片段按照要求重叠在一起形成透明或半透明效果。Premiere电影编辑软件里提供了多达97个视频高叠轨道用以实现影像片段的合成。在高叠片段的video Option命令中有一个专门用于合成的透明设置选项Transparency,    它提供了许多key Type基本(透明)类型。其中Alpha channel key就是利用影像或图片的Alpha通道在片段上选定区域形成透明效果。
    一些影视创作人员在节目编辑中,为了把广告的图标、报道题花等图案作为标记或栏目标题叠加在画面上,使用Photoshop、3DMAX或Cool3d等软件生成带Alpha通道的32位TGA图片或图片序列,在非编系统软件中运用Alpha channel key功能实现标题字幕      或图标的高叠。

 8. Alpha通道在多媒体集成工具Authorware中的运用
    Authorware5.0以前的版本中的图片只有五种透明方式:为Opaque mode(不透明模式)、Matted mode(边缘透明模式)、Transparent mode(透明模式)、Inverse mode(反转模式)、Erase mode(擦除模式)。这些透明方式的共同问题是只能透明白色部分而且要纯白的才可以,也无法实现制作半透明的图片。Authorware5.0及其以后的版本已支持Alpha通道作为图片的透明方式。利用图片的Alpha通道,信息可精确地透明相应画面的每一个部分,产生十分完美的透明或半透明效果。尤其是,使用其它工具完成的半透明图片是静止的,而且图片中各个部分位置是固定的,而在Authorware中通过Alpha透明模式结合Transitions过渡属性和位置移动动画设置实现的半透明合成可以动态地进行,不但可以任意改变各部分的位置,而且还可以任意调整各部分大小,其操作的灵活性和效果的丰富性是可想而知的。
    笔者曾在使用Authorware5.0模拟汉字书写笔画的教学课件中运用Alpha通道技术,取得了很好的效果。以“木”字为例。
    第一步,利用Photoshop5.0做好如下四张图片,分别命名为“木1.psd”、“木2.psd”、“木3.psd”和“木4.psd”。四张图片内容完全一样,只是Alpha通道不同。
    第二步,将四张图片载入Authorware5.0文档中按如下安排显示顺序:
    第三步,设置所有显示图标都为Alpha mode透明方式以呈现相应笔画,并设置各显示图标适当的Transition过渡方式,以展示各笔画正确的书写过程。图标“木1.psd”选取Transition属性为Wipe中的Wipe Right,图标“木2.psd”选取Wipe中的Wipe Down,图标“木3.psd”选取Stirps中的Strips on Top,Build Left,图标“木4.psd”选取Strips中的Strips on Top,Build Right。为使效果更准确,图标间可添加一个等待图标,保证笔画之间有一定时间间隔或通过点击鼠标来控制书写速度。

10.opengl 里面,alpha值通常是在激活了混合操作之后起作用的。用来将已经处理过的片元颜色值与存储在帧缓存中的像素颜色值结合起来。如果不进行混合操作,每个新的片元都将被opengl当成是不透明的,覆盖掉已经存在的所有颜色值。利用混合操作可以实现半透明等状态。可以这样看alpha值,将片元的RGB分量考虑为对颜色的表示,而将alpha值分量考虑为颜色的不透明度。

9.结束语
    Alpha通道技术本身并不复杂,但其运用上的创意是无限的。不断总结在多媒体课件作品开发中运用Alpha通道技术的途径以提高作品技术质量、增强作品艺术感染力,是一个永无止境的课题。

 

二、colorkey

http://blog.chinaunix.net/uid-14442981-id-3766181.html

1.大图像A是1920x1080大小,在上面贴一个小图像300x200(称为图像B,作为OSD),一般这个osd的数据结构可能是:
struct osd_type {
        void *raster;          //图像点阵
        int alpha;              //0到100的透明度
        int colorkey;          //colorkey值
        int flag;                 //标记(alpha或colorkey使能)
};(这个数据结构是我想象出来的,不要对号入座,八九不离十吧)
flag 比如设置为 ENABLE_ALPHA | ENABLE_COLORKEY,colorkey为0xffffff(白色),alpha为50%;
那么实际效果是:osd的0xffffff全部过滤掉,其它地方显示50%亮度。

2.如图,小人的背景是青色的(R:0,G:FF,B:FF),那么我们现在要将小人背景透明化,则现在的color key就是青色的。

3.Colorkey技术是作用在两个图像叠加混合的时候,对特殊色做特殊过滤,符合条件的区域叫match区,在match区就全部使用另外一个图层的颜色值,不符合条件的区域就是非match区,非match区就是走普通的alpha混合。Alpha值越大就是越不透明。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于alpha和color key的主要内容,如果未能解决你的问题,请参考以下文章

alpha和color key

颜色Color.alpha()/Color.red()/Color.green()/Color.blue()/Color.argb() setPixel()/getPixel()

断言失败:第 24 行 pos 15:'color != null && color.alpha == 0xFF':不正确

ggplot2:更改 scale_color_viridis_c 的 Alpha 但不是图例

ILC_COLOR32 图像列表中的图像是不是经过 alpha 预乘?我收到相互矛盾的信息

java.awt.Color类