Paket | flash.filters |
Klasse | public final class ColorMatrixFilter |
Vererbung | ColorMatrixFilter BitmapFilter Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Hinweis: Bei RGBA-Werten steht das höchstwertige Byte für den Wert des Rotkanals, gefolgt von Grün, Blau und schließlich Alpha.
Verwenden Sie zum Erstellen eines neuen Farbmatrixfilters die Syntax new ColorMatrixFilter()
. Die Verwendung von Filtern hängt davon ab, auf welches Objekt sie jeweils angewendet werden:
- Um Filter auf Movieclips, Textfelder, Schaltflächen und Videosequenzen anzuwenden, verwenden Sie die Eigenschaft
filters
(von DisplayObject übernommen). Durch die Einstellung derfilters
-Eigenschaft wird das betroffene Objekt selbst nicht verändert, und Sie können den Filter wieder entfernen, indem Sie diefilters
-Eigenschaft löschen. - Um Filter auf BitmapData-Objekte anzuwenden, verwenden Sie die
BitmapData.applyFilter()
-Methode. Durch den Aufruf vonapplyFilter()
bei einem BitmapData-Objekt wird das gefilterte Bild aus dem BitmapData-Quellobjekt und dem Filterobjekt generiert.
Wenn Sie einen Filter auf ein Anzeigeobjekt anwenden, wird die cacheAsBitmap
-Eigenschaft des Anzeigeobjekts auf true
gesetzt. Wenn Sie alle Filter entfernen, wird der ursprüngliche Wert von cacheAsBitmap
wiederhergestellt.
Ein Filter wird nicht angewendet, wenn das Ergebnisbild die maximalen Abmessungen überschreitet. In AIR 1.5 und Flash Player 10 beträgt die maximale Höhe oder Breite 8.191 Pixel; die gesamte Pixelzahl darf 16.777.215 nicht übersteigen. (Wenn ein Bild also 8.191 Pixel breit ist, darf es nur 2.048 Pixel hoch sein.) In Flash Player 9 und niedriger und AIR 1.1 und niedriger liegt die Grenze bei je 2.880 Pixel Höhe und Breite. Wenn Sie beispielsweise einen großen Movieclip mit aktiviertem Filter vergrößert darstellen, wird der Filter deaktiviert, sobald das Ergebnisbild die maximalen Abmessungen erreicht.
Verwandte API-Elemente
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Eigenschaft | Definiert von | ||
---|---|---|---|
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
matrix : Array
Ein Array von 20 Elementen für eine Farbtransformierung des Typs 4 x 5. | ColorMatrixFilter |
Methode | Definiert von | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Initialisiert eine neue ColorMatrixFilter-Instanz mit den angegebenen Parametern. | ColorMatrixFilter | ||
[override]
Gibt eine Kopie dieses Filterobjekts zurück. | ColorMatrixFilter | ||
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde. | Object | ||
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde. | Object | ||
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann. | Object | ||
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest. | Object | ||
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas. | Object | ||
Gibt das angegebene Objekt als String zurück. | Object | ||
Gibt den Grundwert des angegebenen Objekts zurück. | Object |
matrix | Eigenschaft |
matrix:Array
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Ein Array von 20 Elementen für eine Farbtransformierung des Typs 4 x 5. Die matrix
-Eigenschaft kann nicht unmittelbar durch Änderung ihres Werts geändert werden (z. B. durch myFilter.matrix[2] = 1;
). Sie müssen stattdessen einen Verweis auf das Array erstellen, dort die Änderungen vornehmen und dann den Wert zurücksetzen.
Der Farbmatrixfilter trennt die Rot-, Grün-, Blau- und Alpha-Komponenten aller Quellpixel in srcR, srcG, srcB und srcA. Zum Berechnen der Ergebnisse für jeden der vier Kanäle wird der Wert jedes Bildpixels mit den Werten in der Transformationsmatrix multipliziert. Zu jedem Ergebnis kann optional ein Versatzwert zwischen -255 und 255 addiert werden (das fünfte Element jeder Matrixzeile). Der Filter fasst alle Farbkomponenten wieder zu einem Pixel zusammen und gibt das Ergebnis aus. In der folgenden Formel entsprechen a[0] bis a[19] den Einträgen 0 bis 19 in einem Array von 20 Elementen, das der matrix
-Eigenschaft übergeben wird:
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]
Für alle Farbwerte im Array bedeutet der Wert 1, dass dieser Kanal zu 100 % in die Ausgabe übernommen wird und der Wert des Farbkanals somit erhalten bleibt.
Die Berechnungen werden für die nicht multiplizierten Farbwerte durchgeführt. Wenn die Eingabegrafiken vormultiplizierte Farbwerte enthalten, werden diese Werte bei dieser Operation automatisch in nicht multiplizierte Farbwerte umgewandelt.
Es stehen zwei optimierte Modi zur Verfügung:
Nur Alpha. Wenn Sie dem Filter eine Matrix übergeben, mit der wie in der folgenden Darstellung nur die Alpha-Komponente geändert wird, optimiert der Filter die Leistung:
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)
Schnellere Version: Steht nur bei SSE-/AltiVec-beschleunigten Prozessoren zur Verfügung (wie Intel® Pentium® 3 und höher bzw. Apple® G4 und höher). Der Beschleuniger wird verwendet, wenn die Multiplikatoren zwischen -15,99 und 15,99 und die Additionsterme a[4], a[9], a[14] und a[19] zwischen -8.000 und 8.000 liegen.
Implementierung
public function get matrix():Array
public function set matrix(value:Array):void
Auslöser
TypeError — Das Array ist leer, wenn gesetzt.
|
ColorMatrixFilter | () | Konstruktor |
public function ColorMatrixFilter(matrix:Array = null)
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Initialisiert eine neue ColorMatrixFilter-Instanz mit den angegebenen Parametern.
Parametermatrix:Array (default = null ) — Ein Array von 20 Elementen, die als 4 x 5-Matrix angeordnet sind.
|
clone | () | Methode |
override public function clone():BitmapFilter
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Gibt eine Kopie dieses Filterobjekts zurück.
RückgabewerteBitmapFilter — Eine neue ColorMatrixFilter-Instanz mit allen Eigenschaften der ursprünglichen Instanz.
|
buildChild()
viermal auf, um vier Instanzen des Bildes zu laden und anzuzeigen. Beim ersten Aufrufen von buildChild()
wird null
als Argument angenommen und kein Filter auf die erste Instanz angewendet. Bei jedem folgenden Aufruf von buildChild()
wird eine Funktion als Argument angenommen, mit der ein anderer Farbmatrixfilter auf jede folgende Instanz des Bildes angewendet wird.
Mit der Funktion buildChild()
wird ein neues Loader-Objekt namens loader
erstellt. Bei jedem Aufruf von buildChild()
wird ein Ereignis-Listener an das Loader-Objekt angehängt. Auf diese Weise werden complete
-Ereignisse erfasst, die von der an buildChild()
übergebenen Funktion bearbeitet werden.
Die Funktionen applyRed()
, applyGreen()
und applyBlue()
verwenden verschiedene Werte für das matrix
-Array, um unterschiedliche Effekte zu erzielen.
Hinweis: Die besten Ergebnisse erzielen Sie mit einem Bild mit ca. 80 Pixel Breite. Der Name und Speicherort der Bilddatei sollten dem an die url
-Eigenschaft übergebenen Wert entsprechen. Beispielsweise verweist der an url
übergebene Wert auf eine Datei mit dem Namen „Image.jpg“, die sich im selben Ordner wie die SWF-Datei befindet.
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, 10:04 AM Z