標籤雲

搜尋此網誌

2009/02/04

影像色調的矩陣-ColorMatrixFilter

flash.filters.ColorMatrixFilter 類別是用 4 x 5 矩陣產生一組 RGBA 值。可以用來進行飽和度變更、色相旋轉、Alpha 明度以及各種其它效果。

適用物件: 繼承自 DisplayObject 的物件都可套用,例如 MovieClip、SimpleButton、TextField 和 Video 物件,以及 BitmapData 物件。

套用方式:(套用時該物件cacheAsBitmap 屬性會自動設為 true, 移除則還原)
MovieClip、TextField、Button 與 Video: 使用 filters 屬性 (從 DisplayObject 繼承而來)。
//只要清除 filters 屬性就可以移除濾鏡,不會修改該物件。
BitmapData 物件: 使用 BitmapData.applyFilter() 方法。
//會採用原始 BitmapData 物件和濾鏡物件,結果會產生套用濾鏡後的影像。

尺寸限制: 影像的 width 或 height 不可超過 2880 px,否則不會套用濾鏡。

建構子:
public function ColorMatrixFilter(matrix:Array = null)
//傳入的 matrix 參數即為長度 20 的 Array

屬性:
matrix : Array
//用於 4 x 5 顏色變化的 20 個項目陣列。使用 Array 的 concat() 方法調整矩陣內容

方法:
clone():BitmapFilter //傳回此濾鏡物件的副本。

完全沒有套用任何濾鏡的 ColorMatrixFilter 應該是這樣:
Value
RedGreenBlueAlphaOffset
Channel
Red10000
Green01000
Blue00100
Alpha00010

簡單範例如下:
var matrix1:Array =
[1,0,0,0,0,
0,2,0,0,0,
0,0,1,0,0,
0,0,0,1,0];
var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix1);
clip.filters = [cmf];
//套用後 clip 的綠色變成兩倍

var matrix2:Array = new Array();
matrix2 = matrix2.concat([1, 0, 0, 0, 0]); // red
matrix2 = matrix2.concat([0, 0, 0, 0, 0]); // green
matrix2 = matrix2.concat([0, 0, 0, 0, 0]); // blue
matrix2 = matrix2.concat([0, 0, 0, 1, 0]); // alpha
applyFilter(clip, matrix2);

function applyFilter(child:DisplayObject, matrix:Array):void{
 var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
 var filters:Array = new Array();
 filters.push(filter);
 child.filters = filters;
}
//套用後 clip 只看得到 R Channel

還可以玩玩看下面方法:
調整亮度: 將 RGB 三個 Channel 的 Offset 都調整至同一數值(如:50)

灰階: 將 RGB 三個 Channel 的 R,G,B 都調整至同一數值(如:0.5)

調整對比: 將 R Channel 的 R, G Channel 的 G, B Channel 的 B 調整至同一數值(如:3)

負片效果: 將 RGB 三個 Channel 的 Offset 都調整至255, 並將 R Channel 的 R, G Channel 的 G, B Channel 的 B 調整至 -1

2 則留言:

匿名 提到...


謝謝你

匿名 提到...

讚!讚!讚!
很詳盡~解決我的困惑~^^