搜尋部落格文章

2013年7月11日 星期四

[轉] ColorMatrixFilter顏色矩陣濾鏡詳細介紹

顏色矩陣
在flash中可以用矩陣方便的操作顏色。 在flash8以前的版本,操作顏色的唯一途徑就是通過修改顏色對像中紅,綠,藍三個通道的值,在Flash8,"顏色矩陣濾鏡" ColorMatrixFilter (flash.filters.ColorMatrixFilter) 在顆粒等級上提供給你更好的控制方法。 "顏色矩陣濾鏡"為4行5列的多維矩陣(20個元素的數組)。 圖4 是與"顏色矩陣濾鏡"等同的矩陣。
Flash中的顏色矩陣
圖4.與"顏色矩陣濾鏡"等同的矩陣
紅,綠,藍通道的值由如下所示計算方法所決定:
CODE:
redResult = a[0] * srcR + a[1] * srcG + a[2] * srcB + a[3] * srcA + a[4]
greenResult = a[5] * srcR + a[6] * srcG + a[7] * srcB + a[8] * srcA + a[9]
blueResult = a[10] * srcR + a[11] * srcG + a[12] * srcB + a[13] * srcA + a[14]
alphaResult = a[15] * srcR + a[16] * srcG + a[17] * srcB + a[18] * srcA + a[19]
可以看出,第一行的值決定了紅色值,第二行決定綠色,第三行藍色,第四行是透明(Alpha)通道值。 同樣可以看出首四欄值是與紅,綠,藍,alpha通道值的乘積,而第五欄的值分別是和(偏移量)。 注意每行的源值和結果值都是在0到255的區間內。 因此即使各個通道的值小於0或大於255都會被強製到該區間內。 我來舉些例子說明它的原理。
果你想在紅色通道加100(偏移量),將a[4]設置為100,如(圖5) 。
Flash中的顏色矩陣
圖5.紅色值增加100
如果想使綠色通道加倍,將a[6]設為2,如(圖6)
Flash中的顏色矩陣
圖6.綠色加倍
如果你要使結果圖像中的藍色與原圖的紅色數量相等,將a[10]設為1, a[12]設為0 ,如(圖7)
Flash中的顏色矩陣
圖7.紅色決定藍色值
改變圖像的,你需要在每個顏色通道的值改變同樣的數量。 最簡單的途徑是在每個通道都設置相同的偏移量。 偏移量為正時可以增加亮度為負時可以減小亮度。 (圖8) 是一個增加亮度的例子。
Flash中的顏色矩陣
圖8.增加亮度
你也可以通過將每個顏色通道與一個值相乘按比例的改變亮度,大於1的增加亮度小於1減小亮度。
按照原理,將圖像轉換為灰度圖,你需要將每個通道的部分設為等值。 因為有三個通道,你可以將每個通道乘以0.33並將它們相加得到結果值。 如(圖9)
Flash中的顏色矩陣
圖9.灰度圖矩陣
由於不同顏色通道的相對屏幕發光度,但是確實有特殊的提供更加真實的灰度圖的"亮度係數"值。 例如在PS裡創建一個純綠色塊然後把它放在一個純藍色塊,然後將圖像灰度化,你會看到原來綠色的地方的灰色會比原來藍色的區域要亮。
在Flash裡使用這些矩陣,創建一個"顏色矩陣濾鏡"的實例然後將它加入到一個影片剪輯(MovieClip)實例上。 下面是一個使綠色加倍的例子:
CODE: 
import flash.filters.ColorMatrixFilter;
var mat:Array = [ 1,0,0,0,0,
0,2,0,0,0,
0,0,1,0,0,
0,0,0,1,0 ];
var colorMat:ColorMatrixFilter = new ColorMatrixFilter(mat);
clip.filters = [colorMat];
"顏色矩陣濾鏡"與一個已知的矩陣使用,你可以完成除了亮度和灰度之外複雜的顏色調整。 調整對比度,飽和度和色相在Flash 8種都成為了肯能。 雖然在這裡討論這些話題與這篇文章有些遠,但是足以說Flash 8提供了一個以前任何版本都不能做到的顏色操作途徑。

沒有留言:

張貼留言