1. 程式人生 > >alpha和color key

alpha和color key

教學 .net 不同的 image 混合 要求 序列 inverse targa

一、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