套件 | flash.filters |
類別 | public class ShaderFilter |
繼承 | ShaderFilter BitmapFilter Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
若要建立新的濾鏡,請使用建構函數 new ShaderFilter()
。濾鏡的使用取決於濾鏡套用到的物件:
- 若要將濾鏡套用至影片片段、文字欄位、按鈕與視訊,請使用
filters
屬性 (從 DisplayObject 繼承而來)。 設定物件的filters
屬性不會修改該物件,而且只要清除filters
屬性就可以移除濾鏡。 - 若要將濾鏡套用至 BitmapData 物件,請使用
BitmapData.applyFilter()
方法。 對 BitmapData 物件呼叫applyFilter()
時會採用原始 BitmapData 物件和濾鏡物件,結果會產生套用濾鏡後的影像。
如果您將濾鏡套用至顯示物件,該顯示物件的 cacheAsBitmap
屬性值就會設定為 true。 如果您移除所有濾鏡,就會還原 cacheAsBitmap
的原始值。
這個濾鏡支援舞台縮放。但是,並不支援一般的縮放、旋轉和傾斜。 如果是縮放物件本身 (如果 scaleX
和 scaleY
屬性不是設定為 100%),則不會縮放濾鏡。 濾鏡只在使用者在「舞台」上放大顯示時才會進行縮放。
如果產生的影像超過最大尺寸,系統就不會套用濾鏡。在 AIR 1.5 和 Flash Player 10 中,最大寬度或高度為 8,191 像素,而且像素總計不得超過 16,777,215 像素。(因此,如果影像寬度為 8,191 像素,則其高度上限為 2,048 像素)。若為 Flash Player 9 和 AIR 1.1 及其更早版本,高度和寬度的上限都是 2,880 像素。例如,當您在套用某個濾鏡的大型影片片段上進行放大顯示時,如果產生的影像超過最大尺寸,便會關閉該濾鏡。
若要指定要搭配濾鏡一起使用的 Shader 實體,請將 Shader 實體當成引數傳遞至 ShaderFilter()
建構函式,或將其設為 shader
屬性的值。
若要允許著色器輸出以延伸套用濾鏡的物件範圍,請使用 leftExtension
、rightExtension
、topExtension
,以及 bottomExtension
屬性。
相關 API 元素
flash.display.DisplayObject.cacheAsBitmap
flash.display.BitmapData.applyFilter()
flash.display.Shader
屬性 | 定義自 | ||
---|---|---|---|
bottomExtension : int
目標物件下緣的像素成長。 | ShaderFilter | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
leftExtension : int
目標物件左側的像素成長。 | ShaderFilter | ||
rightExtension : int
目標物件右側的像素成長。 | ShaderFilter | ||
shader : Shader
要用於此濾鏡的著色器。 | ShaderFilter | ||
topExtension : int
目標物件上緣的像素成長。 | ShaderFilter |
方法 | 定義自 | ||
---|---|---|---|
ShaderFilter(shader:Shader = null)
建立新的著色器濾鏡。 | ShaderFilter | ||
傳回 BitmapFilter 物件,此物件是與原始 BitmapFilter 物件完全相同的副本。 | BitmapFilter | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object |
bottomExtension | 屬性 |
bottomExtension:int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
目標物件下緣的像素成長。
成長項目指的是超出目標物件範圍,且在執行期間傳遞至著色器的區域。在執行階段,Flash Player 或 AIR 會計算影片片段的正常範圍,並依據 leftExtension
、rightExtension
、topExtension
和 bottomExtension
值來延伸其範圍。
預設值為 0。
實作
public function get bottomExtension():int
public function set bottomExtension(value:int):void
leftExtension | 屬性 |
leftExtension:int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
目標物件左側的像素成長。
成長項目指的是超出目標物件範圍,且在執行期間傳遞至著色器的區域。在執行階段,Flash Player 或 AIR 會計算影片片段的正常範圍,並依據 leftExtension
、rightExtension
、topExtension
和 bottomExtension
值來延伸其範圍。
預設值為 0。
實作
public function get leftExtension():int
public function set leftExtension(value:int):void
rightExtension | 屬性 |
rightExtension:int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
目標物件右側的像素成長。
成長項目指的是超出目標物件範圍,且在執行期間傳遞至著色器的區域。在執行階段,Flash Player 或 AIR 會計算影片片段的正常範圍,並依據 leftExtension
、rightExtension
、topExtension
和 bottomExtension
值來延伸其範圍。
預設值為 0。
實作
public function get rightExtension():int
public function set rightExtension(value:int):void
shader | 屬性 |
shader:Shader
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
要用於此濾鏡的著色器。
指派給 shader
屬性的 Shader 至少必須指定一個 image4
輸入。 此輸入不需要一定得使用關聯的 ShaderInput 物件之 input
屬性於程式碼中指定。反之,套用濾鏡的物件會被自動用來當成第一個輸入 (包含 index
0 的輸入)。 當作濾鏡使用的著色器可以指定一個以上的輸入,在此情況中,其他額外的輸入都必須藉由設定其 ShaderInput 實體的 input
屬性才能加以指定。
當您將 Shader 實體指派給此屬性時,著色器會在內部進行複製,且濾鏡作業會使用該內部副本,而不是原始著色器的參考。 任何對著色器的變更,例如變更參數值、輸入,或是位元組碼,都不會套用到用於濾鏡上的著色器副本。為了讓濾鏡輸出考慮到著色器變更,您必須將 Shader 實體重新指派給 shader
屬性。如同所有濾鏡,您也必須重新指派 ShaderFilter 實體給顯示物件的 filters
屬性,以便套用濾鏡變更。
實作
public function get shader():Shader
public function set shader(value:Shader):void
topExtension | 屬性 |
topExtension:int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
目標物件上緣的像素成長。
成長項目指的是超出目標物件範圍,且在執行期間傳遞至著色器的區域。在執行階段,Flash Player 或 AIR 會計算影片片段的正常範圍,並依據 leftExtension
、rightExtension
、topExtension
和 bottomExtension
值來延伸其範圍。
預設值為 0。
實作
public function get topExtension():int
public function set topExtension(value:int):void
ShaderFilter | () | 建構函式 |
shader
屬性來使用。程式碼會在 Sprite 實體中繪製一個圓形,並將其新增至舞台。當著色器載入時,著色器濾鏡就會套用到該 Sprite 上。
請注意,此範例假設和應用程式輸出目錄相同的目錄中存在一個名為「gradient.pbj」的著色器位元組碼檔案。
// // Source code for the shader: // <languageVersion : 1.0;> kernel RedGradientFilter < namespace: "Adobe::Example"; vendor: "Adobe examples"; version: 1; description: "Applies a gradient across the red channel of the input image."; > { input image4 src; output pixel4 dst; parameter float width < description: "The width of the image to which the shader is applied."; minValue: 0.0; >; void evaluatePixel() { pixel4 temp = sampleNearest(src, outCoord()); temp.r = 1.0 - (outCoord().x * (1.0 / width)); dst = temp; } } // // ActionScript source code: // package { import flash.display.Shader; import flash.display.Sprite; import flash.events.Event; import flash.filters.ShaderFilter; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class ShaderFilterExample extends Sprite { private var loader:URLLoader; private var s:Sprite; public function ShaderFilterExample() { loader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, loadCompleteHandler); loader.load(new URLRequest("gradient.pbj")); s = new Sprite(); s.graphics.beginFill(0x009900); s.graphics.drawCircle(100, 100, 100); addChild(s); } private function loadCompleteHandler(event:Event):void { var shader:Shader = new Shader(loader.data); shader.data.width.value = [s.width]; var gradientFilter:ShaderFilter = new ShaderFilter(shader); s.filters = [gradientFilter]; } } }
Tue Jun 12 2018, 03:47 PM Z