適用物件: 繼承自 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 | ||||||||
---|---|---|---|---|---|---|---|---|
Red | Green | Blue | Alpha | Offset | ||||
Channel | ┌ | ┐ | ||||||
Red | │ | 1 | 0 | 0 | 0 | 0 | │ | |
Green | │ | 0 | 1 | 0 | 0 | 0 | │ | |
Blue | │ | 0 | 0 | 1 | 0 | 0 | │ | |
Alpha | │ | 0 | 0 | 0 | 1 | 0 | │ | |
└ | ┘ |
簡單範例如下:
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 則留言:
讚
謝謝你
讚!讚!讚!
很詳盡~解決我的困惑~^^
張貼留言