Pakket | flash.filters |
Klasse | public class ConvolutionFilter |
Overerving | ConvolutionFilter BitmapFilter Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
U kunt een convolutiefilter maken met de syntaxis new ConvolutionFilter()
. Het gebruik van filters is afhankelijk van het object waarop u het filter toepast:
- Wanneer u filters wilt toepassen op filmclips, tekstvelden, knoppen en video, gebruikt u de eigenschap
filters
(overerfd van DisplayObject). Het instellen van de eigenschapfilters
van een object wijzigt het object niet en het filter kan ongedaan worden gemaakt door de eigenschapfilters
te wissen. - Wanneer u filters wilt toepassen op objecten BitmapData, gebruikt u de methode
BitmapData.applyFilter()
. WanneerapplyFilter()
op een object BitmapData wordt aangeroepen, wordt van het bronobject BitmapData en het filterobject een gefilterde afbeelding gegenereerd.
Wanneer u een filter toepast op een weergaveobject, wordt de waarde van de eigenschap cacheAsBitmap
van het object op true
ingesteld. Wanneer u alle filters wist, wordt de oorspronkelijke waarde van cacheAsBitmap
hersteld.
Er wordt geen filter toegepast als de resulterende afbeelding groter is dan de maximale afmetingen. In AIR 1.5 en Flash Player 10 is de maximale grootte 8,191 pixels breed of hoog en mag het totale aantal pixels niet groter zijn dan 16,777,215 pixels. (Als een afbeelding 8,191 pixels breed is, kan deze daarom slechts 2048 pixels hoog zijn.) In Flash Player 9 en lager en AIR 1.1 en lager is de maximale hoogte 2880 pixels en de maximale breedte 2880 pixels. Wanneer u bijvoorbeeld inzoomt op een grote filmclip met een toegepast filter, wordt het filter uitgeschakeld wanneer de resulterende afbeelding de maximale afmetingen overschrijdt.
Verwante API-elementen
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
matrix
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
alpha : Number
De alpha-transparantiewaarde van de vervangende kleur. | ConvolutionFilter | ||
bias : Number
De mate van afwijking die aan het resultaat van de matrixtransformatie moet worden toegevoegd. | ConvolutionFilter | ||
clamp : Boolean
Geeft aan of de afbeelding moet worden vastgeklemd. | ConvolutionFilter | ||
color : uint
De hexadecimale kleur ter vervanging van pixels buiten de bronafbeelding. | ConvolutionFilter | ||
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
divisor : Number
Deler die wordt gebruikt tijdens matrixtransformatie. | ConvolutionFilter | ||
matrix : Array
Array van waarden die worden gebruikt voor matrixtransformatie. | ConvolutionFilter | ||
matrixX : Number
De x-afmetingen van de matrix (het aantal kolommen in de matrix) | ConvolutionFilter | ||
matrixY : Number
De y-afmetingen van de matrix (het aantal rijen in de matrix). | ConvolutionFilter | ||
preserveAlpha : Boolean
Geeft aan of het alpha-kanaal zonder het filtereffect wordt behouden en of het convolutiefilter zowel op het alpha-kanaal als op de kleurkanalen wordt toegepast. | ConvolutionFilter |
Methode | Gedefinieerd door | ||
---|---|---|---|
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)
Initialiseert een instantie ConvolutionFilter met de opgegeven parameters. | ConvolutionFilter | ||
[overschrijven]
Retourneert een kopie van dit filterobject. | ConvolutionFilter | ||
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeksrepresentatie van het opgegeven object. | Object | ||
Retourneert de primitieve waarde van het opgegeven object. | Object |
alpha | eigenschap |
alpha:Number
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
De alpha-transparantiewaarde van de vervangende kleur. Geldige waarden zijn 0 tot en met 1.0. De standaardwaarde is 0. De waarde .25 stelt bijvoorbeeld een transparantiewaarde in van 25%.
Implementatie
public function get alpha():Number
public function set alpha(value:Number):void
bias | eigenschap |
bias:Number
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
De mate van afwijking die aan het resultaat van de matrixtransformatie moet worden toegevoegd. De afwijking vergroot de kleurwaarde van elk kanaal, zodat donkere kleuren lichter worden weergegeven. De standaardwaarde is 0.
Implementatie
public function get bias():Number
public function set bias(value:Number):void
clamp | eigenschap |
clamp:Boolean
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Geeft aan of de afbeelding moet worden vastgeklemd. Voor pixels buiten de bronafbeelding geeft de waarde true
aan dat de invoerafbeelding langs de randen wordt vergroot door in de invoerafbeelding de kleurwaarden van elke rand te dupliceren. De waarde false
geeft aan dat een andere kleur moet worden gebruikt, zoals opgegeven in de eigenschappen color
en alpha
. De standaardwaarde is true
.
Implementatie
public function get clamp():Boolean
public function set clamp(value:Boolean):void
Voorbeeld ( Hoe dit voorbeeld te gebruiken )
BitmapData
, waarbij een van de vensters half zo groot is als het andere. Wanneer het voorbeeld wordt geladen, wordt het grotere venster in mc
getekend met attachBitmap()
. Wanneer op mc
wordt geklikt en de methode applyFilter()
wordt aangeroepen, wordt de instantie largeBox
van BitmapData
opnieuw getekend met smallBox
als bronbitmap. Aangezien smallBox
door applyFilter()
over een Rectangle
wordt getekend waarvan de hoogte en breedte zijn opgegeven als de hoogte en breedte van largeBox
, is de bronbitmap kleiner dan het tekengebied. De eigenschap clamp
van ConvolutionFilter
is in dit geval op false
ingesteld en het gebied dat niet door de bronbitmap wordt bedekt, smallBox
, is effen rood zoals opgegeven door de variabelen clampColor
en 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 | eigenschap |
color:uint
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
De hexadecimale kleur ter vervanging van pixels buiten de bronafbeelding. Dit is een RGB-waarde zonder alpha-component. De standaardwaarde is 0.
Implementatie
public function get color():uint
public function set color(value:uint):void
divisor | eigenschap |
divisor:Number
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Deler die wordt gebruikt tijdens matrixtransformatie. De standaardwaarde is 1. Een deler die de som van alle matrixwaarden is, spreidt de algemene kleurintensiteit van het resultaat gelijkmatig. De waarde 0 wordt genegeerd en in plaats daarvan wordt de standaardwaarde gebruikt.
Implementatie
public function get divisor():Number
public function set divisor(value:Number):void
matrix | eigenschap |
matrix:Array
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Array van waarden die worden gebruikt voor matrixtransformatie. Het aantal items in de array moet gelijk zijn aan matrixX * matrixY
.
Een matrixconvolutie wordt gebaseerd op een matrix n x m die beschrijft hoe een bepaalde pixelwaarde in de invoerafbeelding wordt gecombineerd met de naastgelegen pixelwaarden om tot een resulterende pixelwaarde te komen. Elke resulterende pixel wordt bepaald door de matrix toe te passen op de overeenkomstige bronpixel en de naastgelegen pixels.
Voor een 3 x 3 matrixconvolutie wordt de volgende formule gebruikt voor elk onafhankelijk kleurkanaal:
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
Bepaalde filterspecificaties leveren betere prestaties, wanneer ze worden uitgevoerd via een processor met SSE (Streaming SIMD Extensions). Criteria voor snellere convolutiehandelingen zijn:
- Het filter moet een 3 x 3 filter zijn.
- Alle filterwaarden moeten gehele getallen zijn tussen -127 en +127.
- De som van alle filterwaarden kan geen absolute waarde groter dan 127 zijn.
- Wanneer een van de filterwaarden negatief is, moet de deler tussen 2,00001 en 256 liggen.
- Wanneer alle filterwaarden positief zijn, moet de deler tussen 1,1 en 256 liggen.
- De afwijking moet een geheel getal zijn.
Opmerking: wanneer u een instantie ConvolutionFilter maakt met de constructor zonder parameters, beïnvloedt de volgorde waarin u waarden toewijst aan matrix-eigenschappen het gedrag van het filter. In het volgende geval wordt de matrixarray toegewezen terwijl de eigenschappen matrixX
en matrixY
nog steeds zijn ingesteld op 0
(de standaardwaarde):
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0]; myfilter.matrixX = 3; myfilter.matrixY = 3;
In het volgende geval wordt de matrixarray toegewezen terwijl de eigenschappen matrixX
en matrixY
zijn ingesteld op 3
:
public var myfilter:ConvolutionFilter = new ConvolutionFilter(); myfilter.matrixX = 3; myfilter.matrixY = 3; myfilter.matrix = [0, 0, 0, 0, 1, 0, 0, 0, 0];
Implementatie
public function get matrix():Array
public function set matrix(value:Array):void
Gegenereerde uitzondering
TypeError — De array is null wanneer deze wordt ingesteld.
|
matrixX | eigenschap |
matrixY | eigenschap |
preserveAlpha | eigenschap |
preserveAlpha:Boolean
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Geeft aan of het alpha-kanaal zonder het filtereffect wordt behouden en of het convolutiefilter zowel op het alpha-kanaal als op de kleurkanalen wordt toegepast. De waarde false
geeft aan dat de convolutie op alle kanalen van toepassing is, inclusief het alpha-kanaal. De waarde true
geeft aan dat de convolutie alleen op de kleurkanalen van toepassing is. De standaardwaarde is true
.
Implementatie
public function get preserveAlpha():Boolean
public function set preserveAlpha(value:Boolean):void
ConvolutionFilter | () | Constructor |
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)
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Initialiseert een instantie ConvolutionFilter met de opgegeven parameters.
ParametersmatrixX:Number (default = 0 ) — De x-afmetingen van de matrix (het aantal kolommen in de matrix). De standaardwaarde is 0.
| |
matrixY:Number (default = 0 ) — De y-afmetingen van de matrix (het aantal rijen in de matrix). De standaardwaarde is 0.
| |
matrix:Array (default = null ) — Array van waarden die worden gebruikt voor matrixtransformatie Het aantal items in de array moet gelijk zijn aan matrixX * matrixY .
| |
divisor:Number (default = 1.0 ) — Deler die wordt gebruikt tijdens matrixtransformatie. De standaardwaarde is 1. Een deler die de som van alle matrixwaarden is, spreidt de algemene kleurintensiteit van het resultaat gelijkmatig. De waarde 0 wordt genegeerd en in plaats daarvan wordt de standaardwaarde gebruikt.
| |
bias:Number (default = 0.0 ) — De afwijking die aan het resultaat van de matrixtransformatie moet worden toegevoegd. De standaardwaarde is 0.
| |
preserveAlpha:Boolean (default = true ) — De waarde false geeft aan dat de alpha-waarde niet behouden is en dat de convolutie wordt toegepast op alle kanalen, waaronder het alpha-kanaal. De waarde true geeft aan dat de convolutie alleen op de kleurkanalen van toepassing is. De standaardwaarde is true .
| |
clamp:Boolean (default = true ) — Voor pixels buiten de bronafbeelding geeft de waarde true aan dat de invoerafbeelding langs de randen wordt vergroot door in de invoerafbeelding de kleurwaarden van de rand in kwestie te dupliceren. De waarde false geeft aan dat een andere kleur moet worden gebruikt, zoals opgegeven in de eigenschappen color en alpha . De standaardwaarde is true .
| |
color:uint (default = 0 ) — De hexadecimale kleur ter vervanging van pixels buiten de bronafbeelding.
| |
alpha:Number (default = 0.0 ) — De alpha van de vervangende kleur.
|
clone | () | methode |
override public function clone():BitmapFilter
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Retourneert een kopie van dit filterobject.
Geretourneerde waardeBitmapFilter — BitmapFilter - Een nieuwe instantie ConvolutionFilter waarvan alle eigenschappen hetzelfde zijn als de originele instantie ConvolutionMatrixFilter.
|
buildChild()
viermaal aan om vier instanties van de afbeelding te laden en weer te geven. Elke aanroep van buildChild()
neemt een functie als argument die geen filter toepast op de eerste instantie en een ander convolutiefilter op iedere volgende instantie.
De functie buildChild()
maakt een nieuw object Loader met de naam loader
. Voor elke aanroep van buildChild()
moet u een gebeurtenislistener aan het object Loader koppelen om naar gebeurtenissen complete
te luisteren, die worden afgehandeld door de functie die wordt doorgegeven aan buildChild()
.
De functies applyBrightness()
, applySharpness()
enapplyOutline()
gebruiken verschillende waarden voor de array matrix
om verschillende effecten voor ConvolutionFilter te bereiken.
Opmerking: gebruik voor het beste resultaat een afbeelding van ongeveer 80 pixels breed. De naam en locatie van het afbeeldingsbestand moet overeenkomen met de waarde die u doorgeeft aan de eigenschap url
. De waarde die wordt doorgegeven aan url
in het voorbeeld verwijst bijvoorbeeld naar een afbeeldingsbestand met de naam Image.jpg dat zich in dezelfde map bevindt als uw SWF-bestand.
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); } } }
Wed Jun 13 2018, 11:42 AM Z