Pakiet | flash.filters |
Klasa | public final class ColorMatrixFilter |
Dziedziczenie | ColorMatrixFilter BitmapFilter Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Uwaga: Dla wartości RGBA bajt najważniejszy reprezentuje wartość kanału czerwieni, po nim następuje kanał zieleni, niebieskiego i alpha.
Aby utworzyć nowy filtr macierzy kolorów, należy użyć instrukcji new ColorMatrixFilter()
. 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.
Zastosowanie filtru do obiektu wyświetlanego powoduje, że dla właściwości cacheAsBitmap
obiektu wyświetlanego zostaje ustawiona wartość 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 osiągnie maksymalne wymiary.
Powiązane elementy interfejsu API
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
matrix : Array
Tablica 20-elementowa (o wymiarach 4 x 5) reprezentująca macierzowe przekształcenie kolorów. | ColorMatrixFilter |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Inicjuje nową instancję obiektu ColorMatrixFilter z określonymi parametrami. | ColorMatrixFilter | ||
[przesłanianie]
Zwraca kopię tego obiektu typu Filter. | ColorMatrixFilter | ||
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 |
matrix | właściwość |
matrix:Array
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Tablica 20-elementowa (o wymiarach 4 x 5) reprezentująca macierzowe przekształcenie kolorów. Właściwości matrix
nie można zmienić poprzez bezpośrednie modyfikowanie jej wartości (na przykład: myFilter.matrix[2] = 1;
). Zamiast tego należy użyć odwołania do tablicy, zmienić odwołanie, a następnie wyzerować wartość.
Filtr macierzy kolorów rozdziela każdy piksel źródłowy na jego składniki: czerwony, niebieski i alpha — tj. srcR, srcG, srcB, srcA. W celu obliczenia wyniku dla każdego z czterech kanałów wartość każdego piksela na obrazie zostaje przemnożona przez wartości w macierzy transformacji. Do każdego wyniku (piąty element w każdym wierszu macierzy) może zostać dodane opcjonalne przesunięcie (z zakresu od -255 do 255). Filtr łączy każdy składnik koloru z pojedynczym pikselem, a następnie zapisuje wynik. W poniższej formule wartości od a[0] do a[19] odpowiadają wpisom od 0 do 19 w tablicy 20-elementowej, która jest przekazywana do właściwości matrix
:
redResult = (a[0] * srcR) + (a[1] * srcG) + (a[2] * srcB) + (a[3] * srcA) + a[4] greenResult = (a[5] * srcR) + (a[6] * srcG) + (a[7] * srcB) + (a[8] * srcA) + a[9] blueResult = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14] alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19]
Dla każdej wartości koloru w tablicy wartość 1 jest równa 100% kanału wysyłanego do wyjścia, co zapewnia zachowanie wartości kanału koloru.
Obliczenia są wykonywane na wartościach kolorów przed mnożeniem. Jeśli grafika wejściowa zawiera wartości wstępnie przemnożonego koloru, te wartości są automatycznie konwertowane na nieprzemnożone wartości koloru dla danej operacji.
Dostępne są dwa zoptymalizowane tryby:
Tylko Alpha. Po przekazaniu do filtra macierzy, która dostosowuje tylko składnik alpha, jak w tym przykładzie, filtr optymalizuje jej działanie:
1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 N 0 (where N is between 0.0 and 1.0)
Wersja szybsza. Dostępna tylko w procesorach, w których aktywny jest akcelerator SSE/AltiVec — takich jak Intel® Pentium® 3 i późniejsze oraz Apple® G4 i późniejsze. Akcelerator jest używany wówczas, gdy mnożnik należy do zakresu od -15,99 do 15,99, a elementy dodawane a[4], a[9], a[14] i a[19] należą do zakresu od -8000 do 8000.
Implementacja
public function get matrix():Array
public function set matrix(value:Array):void
Zgłasza
TypeError — Podczas ustawiania tablica ma wartość null.
|
ColorMatrixFilter | () | Konstruktor |
public function ColorMatrixFilter(matrix:Array = null)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | AIR 1.0, Flash Player 9 |
Inicjuje nowe wystąpienie klasy ColorMatrixFilter z określonymi parametrami.
Parametrymatrix:Array (default = null ) — Tablica 20 elementów, ustawiona jako macierz 4 x 5.
|
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 — Nowa instancja ColorMatrixFilter z wszystkimi właściwościami instancji oryginalnej.
|
buildChild()
cztery razy w celu wczytania i wyświetlenia czterech wystąpień obrazu. Pierwsze wywołanie metody buildChild()
powoduje przyjęcie wartości null
jako argumentu, co powoduje zastosowanie filtru do pierwszej instancji. Każde kolejne wywołanie metody buildChild()
powoduje przyjęcie argumentu w postaci funkcji, która stosuje różne macierze kolorów dla poszczególnych instancji obrazu.
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 applyRed()
, applyGreen()
i applyBlue()
korzystają z różnych wartości dla tablicy matrix
, dzięki czemu zapewniają osiąganie różnych wyników.
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.Event; import flash.events.IOErrorEvent; import flash.filters.ColorMatrixFilter; import flash.net.URLRequest; public class ColorMatrixFilterExample extends Sprite { private var size:uint = 140; private var url:String = "Image.jpg"; public function ColorMatrixFilterExample() { buildChild(null); buildChild(applyRed); buildChild(applyGreen); buildChild(applyBlue); } 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 applyRed(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([1, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 0, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 0, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyGreen(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([0, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 1, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 0, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyBlue(event:Event):void { var child:DisplayObject = DisplayObject(event.target.loader); var matrix:Array = new Array(); matrix = matrix.concat([0, 0, 0, 0, 0]); // red matrix = matrix.concat([0, 0, 0, 0, 0]); // green matrix = matrix.concat([0, 0, 1, 0, 0]); // blue matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha applyFilter(child, matrix); } private function applyFilter(child:DisplayObject, matrix:Array):void { var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix); var filters:Array = new Array(); filters.push(filter); child.filters = filters; } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load image: " + url); } } }
Tue Jun 12 2018, 12:06 PM Z