Paket | flash.filters |
Klasse | public class ConvolutionFilter |
Vererbung | ConvolutionFilter BitmapFilter Object |
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Verwenden Sie zum Erstellen eines Convolution-Filters die Syntax new ConvolutionFilter()
. 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 der Wert der cacheAsBitmap
-Eigenschaft des Objekts 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 überschreitet.
Verwandte API-Elemente
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
Eigenschaft | Definiert von | ||
---|---|---|---|
alpha : Number
Der Alphatransparenzwert der Ersatzfarbe. | ConvolutionFilter | ||
bias : Number
Der Ausgleichswert, der dem Ergebnis der Matrixtransformation hinzugefügt wird. | ConvolutionFilter | ||
clamp : Boolean
Gibt an, ob das Bild an einer bestimmten Position festgesetzt werden soll. | ConvolutionFilter | ||
color : uint
Der Hexadezimalwert der Farbe, durch die die Pixel außerhalb des Quellbilds ersetzt werden. | ConvolutionFilter | ||
constructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz. | Object | ||
divisor : Number
Der während der Matrixtransformation verwendete Nenner. | ConvolutionFilter | ||
matrix : Array
Ein Array von für die Matrixtransformation verwendeten Werten. | ConvolutionFilter | ||
matrixX : Number
Die x-Dimension der Matrix (die Anzahl der Spalten in der Matrix). | ConvolutionFilter | ||
matrixY : Number
Die y-Dimension der Matrix (die Anzahl der Zeilen in der Matrix). | ConvolutionFilter | ||
preserveAlpha : Boolean
Gibt an, ob der Alphakanal ohne Anwendung des Filtereffekts beibehalten wird oder ob der Convolution-Filter neben den Farbkanälen auch auf den Alphakanal angewendet wird. | ConvolutionFilter |
Methode | Definiert von | ||
---|---|---|---|
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)
Initialisiert eine neue ConvolutionFilter-Instanz mit den angegebenen Parametern. | ConvolutionFilter | ||
[override]
Gibt eine Kopie dieses Filterobjekts zurück. | ConvolutionFilter | ||
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 |
alpha | Eigenschaft |
alpha:Number
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Der Alphatransparenzwert der Ersatzfarbe. Die zulässigen Werte liegen zwischen 0 und 1.0. Der Standardwert lautet 0. Mit dem Wert 0,25 wird beispielsweise ein Transparenzwert von 25 % festgelegt.
Implementierung
public function get alpha():Number
public function set alpha(value:Number):void
bias | Eigenschaft |
bias:Number
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Der Ausgleichswert, der dem Ergebnis der Matrixtransformation hinzugefügt wird. Der Ausgleichswert erhöht den Farbwert jedes Kanals, sodass dunkle Farben heller erscheinen. Der Standardwert ist 0.
Implementierung
public function get bias():Number
public function set bias(value:Number):void
clamp | Eigenschaft |
clamp:Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Gibt an, ob das Bild an einer bestimmten Position festgesetzt werden soll. Für Pixel außerhalb des Quellbilds gibt true
an, dass das Eingabebild durch Duplizierung der Farbwerte an jedem seiner Ränder Rand soweit wie nötig über seine Begrenzungen hinaus erweitert wird. Der Wert false
gibt dagegen an, dass entsprechend den Eigenschaften color
und alpha
eine andere Farbe verwendet werden soll. Der Standardwert lautet true
.
Implementierung
public function get clamp():Boolean
public function set clamp(value:Boolean):void
Beispiel ( Verwendung dieses Beispiels )
BitmapData
-Klasse zwei Rahmen erstellt, von denen einer halb so groß ist wie der andere. Beim ersten Laden des Beispiels wird der größere Rahmen mithilfe von attachBitmap()
innerhalb von mc
gezeichnet. Wird mc
angeklickt und die applyFilter()
-Methode aufgerufen, so wird die largeBox
-Instanz von BitmapData
mit smallBox
als Quellbitmap neu gezeichnet. Da applyFilter()
smallBox
über ein Rectangle
zeichnet, dessen Breite und Höhe der Breite und Höhe von largeBox
entsprechen, ist die Quellbitmap kleiner als der Zeichnungsbereich. Die clamp
-Eigenschaft von ConvolutionFilter
ist in diesem Fall auf false
gesetzt und der Bereich, der von der Quellbitmap nicht abgedeckt wird, nämlich smallBox
, ist einfarbig rot, wie in den Variablen clampColor
und clampAlpha
festgelegt.
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 | Eigenschaft |
color:uint
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Der Hexadezimalwert der Farbe, durch die die Pixel außerhalb des Quellbilds ersetzt werden. Hierbei handelt es sich um einen RGB-Wert ohne Alphakomponente. Der Standardwert ist 0.
Implementierung
public function get color():uint
public function set color(value:uint):void
divisor | Eigenschaft |
divisor:Number
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Der während der Matrixtransformation verwendete Nenner. Der Standardwert ist 1. Ein Nenner in der Höhe der Summe aller Matrixwerte gleicht die allgemeine Farbintensität des Ergebnisses aus. Der Wert 0 wird ignoriert, stattdessen wird der Standardwert verwendet.
Implementierung
public function get divisor():Number
public function set divisor(value:Number):void
matrix | Eigenschaft |
matrix:Array
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Ein Array von für die Matrixtransformation verwendeten Werten. Die Anzahl der Elemente in diesem Array muss matrixX * matrixY
entsprechen.
Dabei basiert eine Matrix-Convolution auf einer n-mal-m-Matrix, die beschreibt, wie ein bestimmter Pixelwert im Eingabebild mit den Werten der benachbarten Pixel kombiniert wird, um den Ergebniswert zu erzielen. Jedes Ergebnispixel wird durch Anwenden der Matrix auf den entsprechenden Wert des Quellpixels und der benachbarten Pixel festgelegt.
Bei einem 3 x 3-Matrix-Convolution-Filter wird für jeden einzelnen Farbkanal die folgende Formel angewendet:
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
Bestimmte Filterfunktionen werden schneller ausgeführt, wenn sie auf einem System mit einem SSE-fähigen Prozessor (Streaming SIMD Extensions) ausgeführt werden. Es folgen Kriterien für schnellere Convolution-Vorgänge:
- Beim Filter muss es sich um einen 3x3-Filter handeln.
- Alle Filterterme müssen Ganzzahlen zwischen -127 und +127 sein.
- Die Summe aller Filterterme darf insgesamt nicht mehr als den absoluten Wert 127 ergeben.
- Wenn ein Filterterm negativ ist, muss der Nenner zwischen 2,00001 und 256 liegen.
- Wenn alle Filterterme positiv sind, muss der Nenner zwischen 1,1 und 256 liegen.
- Bei dem Wert des Parameters „bias“ muss es sich um eine Ganzzahl handeln.
Hinweis: Wenn Sie den Konstruktor ohne Parameter zum Erstellen einer ConvolutionFilter-Instanz verwenden, hat die Reihenfolge, in der Sie den Matrixeigenschaften Werte zuweisen, Einfluss auf das Verhalten des Filters. Im folgenden Fall wird das Matrix-Array zugewiesen, während die Eigenschaften matrixX
und matrixY
noch auf 0
gesetzt sind (Standardwert):
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
Im folgenden Fall wird das Matrix-Array zugewiesen, während die Eigenschaften matrixX
und matrixY
auf 3
gesetzt sind:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
Implementierung
public function get matrix():Array
public function set matrix(value:Array):void
Auslöser
TypeError — Das Array ist leer, wenn gesetzt.
|
matrixX | Eigenschaft |
matrixY | Eigenschaft |
preserveAlpha | Eigenschaft |
preserveAlpha:Boolean
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Gibt an, ob der Alphakanal ohne Anwendung des Filtereffekts beibehalten wird oder ob der Convolution-Filter neben den Farbkanälen auch auf den Alphakanal angewendet wird. Der Wert false
gibt an, dass die Convolution auf alle Kanäle angewendet werden soll, auch auf den Alphakanal. Bei true
gilt die Convolution nur für die Farbkanäle. Der Standardwert ist true
.
Implementierung
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)
Sprachversion: | ActionScript 3.0 |
Laufzeitversionen: | AIR 1.0, Flash Player 9 |
Initialisiert eine neue ConvolutionFilter-Instanz mit den angegebenen Parametern.
ParametermatrixX:Number (default = 0 ) — Die x-Dimension der Matrix (die Anzahl der Spalten in der Matrix). Der Standardwert ist 0.
| |
matrixY:Number (default = 0 ) — Die y-Dimension der Matrix (die Anzahl der Zeilen in der Matrix). Der Standardwert ist 0.
| |
matrix:Array (default = null ) — Das Array von für die Matrixtransformation verwendeten Werten. Die Anzahl der Elemente in diesem Array muss matrixX * matrixY entsprechen.
| |
divisor:Number (default = 1.0 ) — Der während der Matrixtransformation verwendete Nenner. Der Standardwert ist 1. Ein Nenner in der Höhe der Summe aller Matrixwerte gleicht die allgemeine Farbintensität des Ergebnisses aus. Der Wert 0 wird ignoriert, stattdessen wird der Standardwert verwendet.
| |
bias:Number (default = 0.0 ) — Der Ausgleichswert, der dem Ergebnis der Matrixtransformation hinzugefügt wird. Der Standardwert ist 0.
| |
preserveAlpha:Boolean (default = true ) — Der Wert false gibt an, dass der Alphawert nicht übernommen wird, sondern dass der Convolution-Filter auf alle Kanäle, einschließlich des Alphakanals, angewendet wird. Bei true gilt die Convolution nur für die Farbkanäle. Der Standardwert ist true .
| |
clamp:Boolean (default = true ) — Für Pixel außerhalb des Quellbilds gibt true an, dass das Eingabebild durch Duplizierung der Farbwerte an einem bestimmten Rand soweit wie nötig über seine Begrenzungen hinaus erweitert wird. Der Wert false gibt dagegen an, dass entsprechend den Eigenschaften color und alpha eine andere Farbe verwendet werden soll. Der Standardwert lautet true .
| |
color:uint (default = 0 ) — Der Hexadezimalwert der Farbe, durch die die Pixel außerhalb des Quellbilds ersetzt werden.
| |
alpha:Number (default = 0.0 ) — Der Alphawert der Ersatzfarbe.
|
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 — BitmapFilter, eine neue ConvolutionFilter-Instanz mit allen Eigenschaften der ursprünglichen ConvolutionMatrixFilter-Instanz.
|
buildChild()
viermal auf, um vier Instanzen des Bildes zu laden und anzuzeigen. Bei jedem Aufruf von buildChild()
wird eine Funktion als Argument angenommen, mit der auf die erste Instanz kein Filter und auf jede folgende Instanz ein anderer Convolution-Filter 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 applyBrightness()
, applySharpness()
und applyOutline()
verwenden verschiedene Werte für das matrix
-Array, um unterschiedliche ConvolutionFilter-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.*; 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, 10:04 AM Z