套件 | flash.filters |
類別 | public class ConvolutionFilter |
繼承 | ConvolutionFilter BitmapFilter Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
若要建立迴旋濾鏡,請使用 new ConvolutionFilter()
語法。 濾鏡的使用取決於濾鏡套用到的物件:
- 若要將濾鏡套用至影片片段、文字欄位、按鈕與視訊,請使用
filters
屬性 (從 DisplayObject 繼承而來)。 設定物件的filters
屬性不會修改該物件,而且只要清除filters
屬性就可以移除濾鏡。 - 若要將濾鏡套用至 BitmapData 物件,請使用
BitmapData.applyFilter()
方法。 對 BitmapData 物件呼叫applyFilter()
時會採用原始 BitmapData 物件和濾鏡物件,結果會產生套用濾鏡後的影像。
如果您將濾鏡套用至顯示物件,該顯示物件的 cacheAsBitmap
屬性值就會設定為 true
。 如果您清除所有濾鏡,則會還原 cacheAsBitmap
的原始值。
如果產生的影像超過最大尺寸,系統就不會套用濾鏡。在 AIR 1.5 和 Flash Player 10 中,最大寬度或高度為 8,191 像素,而且像素總計不得超過 16,777,215 像素。(因此,如果影像寬度為 8,191 像素,則其高度上限為 2,048 像素)。若為 Flash Player 9 和 AIR 1.1 及其更早版本,高度和寬度的上限都是 2,880 像素。例如,當您在套用某個濾鏡的大型影片片段上進行放大顯示時,如果產生的影像超過最大尺寸,便會關閉該濾鏡。
相關 API 元素
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
屬性 | 定義自 | ||
---|---|---|---|
alpha : Number
替代顏色的 Alpha 透明度值。 | ConvolutionFilter | ||
bias : Number
增加至矩陣變形結果的偏差值量。 | ConvolutionFilter | ||
clamp : Boolean
指出是否應該固定影像。 | ConvolutionFilter | ||
color : uint
要用來替代原始影像中的像素的 16 進位顏色。 | ConvolutionFilter | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
divisor : Number
進行矩陣變形時使用的除數值。 | ConvolutionFilter | ||
matrix : Array
用於矩陣變形的值陣列。 | ConvolutionFilter | ||
matrixX : Number
矩陣的 x 維度 (矩陣的行數)。 | ConvolutionFilter | ||
matrixY : Number
矩陣的 y 維度 (矩陣的列數)。 | ConvolutionFilter | ||
preserveAlpha : Boolean
指出是否保留了 Alpha 色版而未保留濾鏡效果,或者迴旋濾鏡是否套用到 Alpha 色版以及顏色色版。 | ConvolutionFilter |
方法 | 定義自 | ||
---|---|---|---|
ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
以指定的參數初始化 ConvolutionFilter 實體。 | ConvolutionFilter | ||
[覆寫]
傳回此濾鏡物件的副本。 | ConvolutionFilter | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object |
alpha | 屬性 |
bias | 屬性 |
clamp | 屬性 |
clamp:Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
指出是否應該固定影像。 對於原始影像中的像素,true
值表示只要複製輸入影像在個別邊緣的顏色值,就可以在必要時延伸輸入影像的每一邊。 false
值表示應該使用其他如 color
和 alpha
屬性所指定的顏色。 預設值為 true
。
實作
public function get clamp():Boolean
public function set clamp(value:Boolean):void
範例 ( 如何使用本範例 )
BitmapData
類別建立兩個方塊,其中一個方塊的大小為另一個方塊的一半。當這個範例第一次載入時,會使用 attachBitmap()
在 mc
中繪製較大的方塊。 當按一下 mc
並呼叫 applyFilter()
方法時,會以 smallBox
做為來源點陣圖,重新繪製 BitmapData
的 largeBox
實體。由於 applyFilter()
是透過 Rectangle
(其寬度與高度會指定為 largeBox
中的寬度與高度) 繪製 smallBox
,所以來源點陣圖會小於繪製的區域。 在此範例中,ConvolutionFilter
的 clamp
屬性會設定為 false
,而且來源點陣圖 smallBox
以外的區域為純紅色,如同 clampColor
和 clampAlpha
變數所決定一般。
package { import flash.display.Sprite; import flash.display.BitmapData; import flash.filters.ConvolutionFilter; import flash.text.TextField; import flash.geom.Rectangle; import flash.geom.Point; public class ConvolutionClampExample extends Sprite { // Variables that affect clamping: var clamp:Boolean = false; var clampColor:Number = 0xFF0000; var clampAlpha:Number = 1; // For illustration, keep other ConvolutionFilter variables neutral: var bias:Number = 0; var preserveAlpha:Boolean = false; // Also, construct a neutral matrix var matrixCols:Number = 3; var matrixRows:Number = 3; var matrix:Array = [ 1,1,1, 1,1,1, 1,1,1 ]; var filter:ConvolutionFilter = new ConvolutionFilter(matrixCols, matrixRows, matrix, matrix.length, bias, preserveAlpha, clamp, clampColor, clampAlpha); var largeBoxWidth:Number = 100; var largeBoxHeight:Number = 100; var largeBox:BitmapData = new BitmapData(largeBoxWidth, largeBoxWidth, true, 0xCC00FF00); var smallBoxWidth:Number = largeBoxWidth / 2; var smallBoxHeight:Number = largeBoxHeight / 2; var smallBox:BitmapData = new BitmapData(smallBoxWidth, smallBoxWidth, true, 0xCC0000FF); var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth()); mc.attachBitmap(largeBox, this.getNextHighestDepth()); mc.onPress = function() { largeBox.applyFilter(smallBox, new Rectangle(0,0, largeBoxWidth, largeBoxHeight), new Point(0,0), filter); } } }
color | 屬性 |
divisor | 屬性 |
matrix | 屬性 |
matrix:Array
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
用於矩陣變形的值陣列。 陣列中的項目數目必須等於 matrixX * matrixY
。
矩陣迴旋係依據 n x m 矩陣,來描述輸入影像內的指定像素值如何與鄰近像素值結合以產生結果像素值。 每一個結果像素都是根據將矩陣套用到對應的指定像素及其鄰近像素所決定。
對於 3 x 3 矩陣迴旋,下列公式可用於每一個獨立的顏色色版:
dst (x, y) = ((src (x-1, y-1) * a0 + src(x, y-1) * a1....
src(x, y+1) * a7 + src (x+1,y+1) * a8) / divisor) + bias
當由提供 SSE (Streaming SIMD Extensions) 的處理器執行時,某些濾鏡規格的執行速度較快。 下列準則有助於加快迴旋作業的速度:
- 濾鏡必須是 3 x 3 濾鏡。
- 所有濾鏡值都必須是介於 -127 和 +127 之間的整數。
- 所有濾鏡值之和的絕對值必須不大於 127。
- 如果任何濾鏡值是負值,則除數值必須介於 2.00001 和 256 之間。
- 如果所有濾鏡值都是正值,則除數值必須介於 1.1 和 256 之間。
- 偏差值 (Bias) 必須是整數。
注意: 如果您使用建構函式並且不搭配參數建立 ConvolutionFilter 實體,將值指定至矩陣屬性的順序將會影響濾鏡的行為。 在下列案例中,矩陣陣列是在 matrixX
和 matrixY
屬性仍然設定為 0
(預設值) 時指定:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
在下列案例中,矩陣陣列是在 matrixX
和 matrixY
屬性設定為 3
時指定:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
實作
public function get matrix():Array
public function set matrix(value:Array):void
擲回值
TypeError — 設定時,Array 為 null
|
matrixX | 屬性 |
matrixY | 屬性 |
preserveAlpha | 屬性 |
ConvolutionFilter | () | 建構函式 |
public function ConvolutionFilter(matrixX:Number = 0, matrixY:Number = 0, matrix:Array = null, divisor:Number = 1.0, bias:Number = 0.0, preserveAlpha:Boolean = true, clamp:Boolean = true, color:uint = 0, alpha:Number = 0.0)
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
以指定的參數初始化 ConvolutionFilter 實體。
參數matrixX:Number (default = 0 ) — 矩陣的 x 維度 (矩陣的行數)。 預設值為 0。
| |
matrixY:Number (default = 0 ) — 矩陣的 y 維度 (矩陣的列數)。 預設值為 0。
| |
matrix:Array (default = null ) — 用於矩陣變形的值陣列。 陣列中的項目數目必須等於 matrixX * matrixY 。
| |
divisor:Number (default = 1.0 ) — 進行矩陣變形時使用的除數值。 預設值為 1。除數值是所有矩陣值總和除以結果的總顏色飽和度。 若值是 0 則忽略,改用預設值。
| |
bias:Number (default = 0.0 ) — 增加至矩陣變形結果的偏差值。 預設值為 0。
| |
preserveAlpha:Boolean (default = true ) — false 值表示 Alpha 值沒有保留,並且迴旋會套用到包含 Alpha 色版在內的所有色版。 true 值則表示迴旋僅會套用到顏色色版。 預設值是 true 。
| |
clamp:Boolean (default = true ) — 對於原始影像中的像素,true 值表示只要複製輸入影像在指定邊緣的顏色值,就可以在必要時延伸輸入影像的每一邊。 false 值表示應該使用其他如 color 和 alpha 屬性所指定的顏色。 預設值為 true 。
| |
color:uint (default = 0 ) — 要用來替代原始影像中的像素的 16 進位顏色。
| |
alpha:Number (default = 0.0 ) — 替代顏色的 Alpha。
|
clone | () | 方法 |
override public function clone():BitmapFilter
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
傳回此濾鏡物件的副本。
傳回值BitmapFilter — BitmapFilter 新的 ConvolutionFilter 實體,其所有屬性都和原始 ConvolutionMatrixFilter 實體的屬性相同。
|
buildChild()
四次,以載入並顯示四個影像實體。 每個對 buildChild()
的呼叫會被視為未將濾境用於第一個實體的函數引數,以及與每個後續實體不同之迴旋濾境的函數引數。
buildChild()
函數會建立新的 Loader 物件,名稱為 loader
。 對於每個對 buildChild()
的呼叫、附接事件偵聽程式到 Loader 物件以偵聽 complete
事件,皆由傳入 buildChild()
的函數處理。
applyBrightness()
、applySharpness()
和 applyOutline()
函數會使用不同的 matrix
陣列值,以達到不同的 ConvolutionFilter 效果。
注意:為達到最佳效果,請使用寬度約為 80 像素的影像。 影像檔的名稱和位置應該與您傳遞至 url
屬性的值相符。 例如,在範例中傳入的 url
值會指向一個名為 "Image.jpg" 的影像檔,該檔案位於與 SWF 檔案相同的目錄。
package { import flash.display.DisplayObject; import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.filters.BitmapFilter; import flash.filters.ConvolutionFilter; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class ConvolutionFilterExample extends Sprite { private var size:uint = 140; private var url:String = "Image.jpg"; public function ConvolutionFilterExample() { buildChild(applyNothing); buildChild(applyBrightness); buildChild(applySharpness); buildChild(applyOutline); } private function buildChild(loadHandler:Function):void { var loader:Loader = new Loader(); loader.x = numChildren * size; loader.y = size; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); if(loadHandler != null) { loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadHandler); } var request:URLRequest = new URLRequest(url); loader.load(request); addChild(loader); } private function applyNothing(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); applyLabel(child, "no filter"); } private function applyBrightness(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [5, 5, 5, 5, 0, 5, 5, 5, 5]; applyFilter(child, matrix); applyLabel(child, "brightness"); } private function applySharpness(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [0, -1, 0, -1, 20, -1, 0, -1, 0]; applyFilter(child, matrix); applyLabel(child, "sharpness"); } private function applyOutline(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = [-30, 30, 0, -30, 30, 0, -30, 30, 0]; applyFilter(child, matrix); applyLabel(child, "outline"); } private function applyFilter(child:DisplayObject, matrix:Array):void { var matrixX:Number = 3; var matrixY:Number = 3; var divisor:Number = 9; var filter:BitmapFilter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor); var filters:Array = new Array(); filters.push(filter); child.filters = filters; } private function applyLabel(child:DisplayObject, label:String):void { var tf:TextField = new TextField(); tf.x = child.x; tf.y = child.height; tf.autoSize = TextFieldAutoSize.LEFT; tf.text = label; addChild(tf); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 03:47 PM Z