Pakiet | flash.filters |
Klasa | public class ConvolutionFilter |
Dziedziczenie | ConvolutionFilter BitmapFilter Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
W celu utworzenia filtru splotu należy użyć konstruktora new ConvolutionFilter()
. Użycie filtra jest uzależnione od obiektu, dla którego filtr ma być stosowany:
- Aby zastosować filtry do klipów filmowych, pól tekstowych, przycisków i filmów wideo, należy użyć właściwości
filters
(dziedziczona z klasy DisplayObject). Ustawienie właściwościfilters
obiektu nie powoduje modyfikacji obiektu, a filtr można usunąć, usuwając właściwośćfilters
. - Aby stosować filtry do obiektów BitmapData, należy użyć metody
BitmapData.applyFilter()
. Wywołanie metodyapplyFilter()
dla obiektu BitmapData powoduje wygenerowanie obrazu filtrowanego ze źródłowego obiektu BitmapData za pomocą obiektu filtru.
Jeśli filtr jest stosowany dla obiektu wyświetlanego, wartość właściwości cacheAsBitmap
tego obiektu jest równa true
. Po usunięciu wszystkich filtrów zostaje przywrócona wartość oryginalna cacheAsBitmap
.
Filtr nie zostanie zastosowany, jeśli wynikowy obraz przekracza maksymalne wymiary. W środowisku AIR 1.5 oraz w programie Flash Player 10 maksymalna wartość szerokości lub wysokości to 8 191 pikseli, a całkowita liczba pikseli nie może przekraczać 16 777 215 pikseli. (Dlatego, jeśli obraz jest szeroki na 8 192 pikseli, może mieć jedynie 2 048 pikseli wysokości). W programie Flash Player 9 i wcześniejszych wersjach oraz w środowisku AIR 1.1 i wcześniejszych wersjach ograniczenie wysokości i szerokości wynosiło 2880 pikseli. Przykład: powiększenie dużego klipu filmowego, do którego zastosowano filtr, powoduje, że filtr zostaje wyłączony, gdy obraz wynikowy przekroczy maksymalne wymiary.
Powiązane elementy interfejsu API
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matryca
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
alpha : Number
Wartość przezroczystości alfa nowego koloru. | ConvolutionFilter | ||
bias : Number
Wartość dodawana do wyniku przekształcenia macierzowego. | ConvolutionFilter | ||
clamp : Boolean
Wskazuje, czy obraz powinien zostać ściśnięty. | ConvolutionFilter | ||
color : uint
Kolor, który ma zastąpić piksele poza obrazem źródłowym (zakodowany szesnastkowo). | ConvolutionFilter | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
divisor : Number
Dzielnik używany przy transformacji matrycy. | ConvolutionFilter | ||
matrix : Array
Tablica wartości używanych do transformacji matrycy. | ConvolutionFilter | ||
matrixX : Number
Wymiar x macierzy (liczba kolumn macierzy). | ConvolutionFilter | ||
matrixY : Number
Wymiar y macierzy (liczba wierszy macierzy). | ConvolutionFilter | ||
preserveAlpha : Boolean
Wskazuje, czy kanał alfa ma pozostać poza zasięgiem filtra, czy też filtr splotu ma być stosowany i do kanału alfa i do kanałów kolorów. | ConvolutionFilter |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
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)
Inicjuje nową instancję obiektu ConvolutionFilter z określonymi parametrami. | ConvolutionFilter | ||
[przesłanianie]
Zwraca kopię tego obiektu typu Filter. | ConvolutionFilter | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg reprezentujący określony obiekt. | Object | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
alpha | właściwość |
alpha:Number
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Wartość przezroczystości alfa nowego koloru. Poprawne wartości należą do zakresu od 0 do 1,0. Wartością domyślną jest 0. Przykład: 0,25 powoduje ustawienie przezroczystości równej 25%.
Implementacja
public function get alpha():Number
public function set alpha(value:Number):void
bias | właściwość |
bias:Number
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Wartość dodawana do wyniku przekształcenia macierzowego. Odchylenie zwiększa wartość koloru dla każdego kanału, dlatego ciemne kolory są jaśniejsze. Wartością domyślną jest 0.
Implementacja
public function get bias():Number
public function set bias(value:Number):void
clamp | właściwość |
clamp:Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Wskazuje, czy obraz powinien zostać ściśnięty. Dla pikseli, które znajdują się poza obrazem źródłowym, wartość true
oznacza, że obraz wejściowy jest w razie potrzeby wydłużany wzdłuż każdej krawędzi poprzez powielanie wartości kolorów na danej krawędzi obrazu wejściowego. Wartość false
oznacza, że powinien być stosowany inny kolor określony przez właściwości color
i alpha
. Wartością domyślną jest true
.
Implementacja
public function get clamp():Boolean
public function set clamp(value:Boolean):void
Przykład ( Sposób korzystania z tego przykładu )
BitmapData
— jedno z pól jest o połowę mniejsze od drugiego. Przy ładowaniu przykładu większe pole jest rysowane wewnątrz mc
za pomocą metody attachBitmap()
. Po kliknięciu mc
i wywołaniu metody applyFilter()
następuje ponowne narysowanie instancji largeBox
(należącej do BitmapData
) za pomocą smallBox
w roli bitmapy źródłowej. applyFilter()
powoduje narysowanie obiektu smallBox
na obszarze Rectangle
, którego wysokość i szerokość są określone jako wymiary largeBox
, dlatego źródłowa bitmapa jest mniejsza niż obszar rysunku. Dla właściwości clamp
obiektu ConvolutionFilter
w tym przypadku ustawiona jest wartość false
, a obszar nieobjęty źródłową bitmapą — smallBox
— ma kolor czerwony, określony przez zmienne clampColor
i 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 | właściwość |
color:uint
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Kolor, który ma zastąpić piksele poza obrazem źródłowym (zakodowany szesnastkowo). Jest to wartość RGB bez składnika alpha. Wartością domyślną jest 0.
Implementacja
public function get color():uint
public function set color(value:uint):void
divisor | właściwość |
divisor:Number
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Dzielnik używany przy transformacji matrycy. Wartością domyślną jest 1. Dzielnik, który jest sumą wszystkich wartości macierzy, wyrównuje intensywność koloru w obiekcie wynikowym. Wartość 0 jest ignorowana i zamiast tego używana jest wartość domyślna.
Implementacja
public function get divisor():Number
public function set divisor(value:Number):void
matrix | właściwość |
matrix:Array
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Tablica wartości używanych do transformacji matrycy. Liczba elementów w macierzy musi być równa matrixX * matrixY
.
Splot macierzy jest określony na podstawie macierzy n x m, która określa sposób, w jaki wartość określonego piksela w obrazie wejściowym zostaje połączona z pikselem sąsiednim w celu wygenerowania wartości piksela wynikowego. Każdy piksel wynikowy zostaje określony poprzez zastosowanie macierzy do odpowiedniego piksela źródłowego oraz jego pikseli sąsiednich.
W przypadku splotu macierzy 3 x 3 dla każdego niezależnego kanału koloru stosowana jest następująca formuła:
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
Niektóre specyfikacje filtrów działają szybciej, jeśli są obsługiwane przez procesor, który oferuje obsługę SSE (Streaming SIMD Extensions). Poniżej przedstawiono kryteria szybszego wykonywania operacji splotu:
- Filtr musi być filtrem 3x3.
- Wszystkie pozycje filtrów muszą być wartościami całkowitymi z zakresu od -127 do 127.
- Moduł sumy wszystkich pozycji filtrów nie może być wyższy niż 127.
- Jeśli dowolna pozycja filtru ma wartość ujemną, dzielnik musi należeć do zakresu od 2,00001 do 256.
- Jeśli wszystkie pozycje filtru są dodatnie, dzielnik musi należeć do zakresu od 1,1 do 256.
- Wartość odchylenia musi być całkowita.
Uwaga: Jeśli instancja ConvolutionFilter jest tworzona za pomocą konstruktora bez parametrów, kolejność, w jakiej wartości są przypisywane do właściwości macierzy, wpływa na działanie filtru. W poniższym przypadku przypisana jest tablica macierzy, a właściwości matrixX
i matrixY
mają wartości 0
(domyślne):
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
W poniższym przypadku przypisana jest tablica macierzy, a właściwości matrixX
i matrixY
mają wartości 3
:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
Implementacja
public function get matrix():Array
public function set matrix(value:Array):void
Zgłasza
TypeError — Podczas ustawiania tablica ma wartość null.
|
matrixX | właściwość |
matrixY | właściwość |
preserveAlpha | właściwość |
preserveAlpha:Boolean
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Wskazuje, czy kanał alfa ma pozostać poza zasięgiem filtra, czy też filtr splotu ma być stosowany i do kanału alfa i do kanałów kolorów. Wartość false
wskazuje, że splot jest stosowany do wszystkich kanałów, również do kanału alpha. Wartość true
oznacza, że splot jest stosowany tylko dla kanałów kolorów. Wartością domyślną jest true
.
Implementacja
public function get preserveAlpha():Boolean
public function set preserveAlpha(value:Boolean):void
ConvolutionFilter | () | Konstruktor |
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)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Inicjuje nowe wystąpienie klasy ConvolutionFilter z określonymi parametrami.
ParametrymatrixX:Number (default = 0 ) — Wymiar x macierzy (liczba kolumn macierzy). Wartością domyślną jest 0.
| |
matrixY:Number (default = 0 ) — Wymiar y macierzy (liczba wierszy macierzy). Wartością domyślną jest 0.
| |
matrix:Array (default = null ) — Tablica wartości używanych do transformacji macierzy. Liczba elementów w macierzy musi być równa matrixX * matrixY .
| |
divisor:Number (default = 1.0 ) — Dzielnik używany przy transformacji matrycy. Wartością domyślną jest 1. Dzielnik, który jest sumą wszystkich wartości macierzy, wyrównuje intensywność koloru w obiekcie wynikowym. Wartość 0 jest ignorowana i zamiast tego używana jest wartość domyślna.
| |
bias:Number (default = 0.0 ) — Wartość odchylenia dodawana do wyniku transformacji macierzy. Wartością domyślną jest 0.
| |
preserveAlpha:Boolean (default = true ) — Wartość false wskazuje, że wartość alpha nie jest zachowywana oraz że splot jest stosowany dla wszystkich kanałów, łącznie z kanałem alpha. Wartość true oznacza, że splot jest stosowany tylko dla kanałów kolorów. Wartością domyślną jest true .
| |
clamp:Boolean (default = true ) — Dla wszystkich pikseli, które znajdują się poza obrazem źródłowym, wartość true wskazuje, że obraz wejściowy jest w razie potrzeby wydłużany wzdłuż każdej krawędzi poprzez powielanie wartości kolorów na danej krawędzi obrazu wejściowegio. Wartość false oznacza, że powinien być stosowany inny kolor określony przez właściwości color i alpha . Wartością domyślną jest true .
| |
color:uint (default = 0 ) — Kolor, który ma zastąpić piksele poza obrazem źródłowym (zakodowany szesnastkowo).
| |
alpha:Number (default = 0.0 ) — Wartość alfa koloru podstawianego.
|
clone | () | metoda |
override public function clone():BitmapFilter
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Zwraca kopię tego obiektu typu Filter.
ZwracaBitmapFilter — BitmapFilter Nowa instancja ConvolutionFilter z wszystkimi właściwościami oryginalnej instancji ConvolutionMatrixFilter.
|
buildChild()
cztery razy w celu załadowania i wyświetlenia czterech instancji obrazu. Każde wywołanie metody buildChild()
przyjmuje jako argument funkcję, która nie stosuje filtru do pierwszej instancji oraz stosuje inny filtr splotu do każdej kolejnej instancji.
Funkcja buildChild()
tworzy nowy obiekt Loader o nazwie loader
. Dla każdego wywołania metody buildChild()
należy dołączyć detektor zdarzeń do obiektu Loader w celu wykrywania zdarzeń complete
, które są obsługiwane przez funkcję przekazaną do metody buildChild()
.
Funkcje applyBrightness()
, applySharpness()
i applyOutline()
korzystają z innych wartości dla tablicy matrix
w celu uzyskania innych efektów ConvolutionFilter.
Uwaga: w celu osiągnięcia najlepszych wyników należy korzystać z obrazów o szerokości około 80 pikseli. Nazwa i lokalizacja pliku obrazu powinna być zgodna z wartością wprowadzoną do właściwości url
. Przykład: wartość wprowadzona do właściwości url
w przykładzie wskazuje na plik obrazu o nazwie „Image.jpg”, który znajduje się w tym samym katalogu, co plik 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, 12:06 PM Z