Pakket | flash.filters |
Klasse | public final class ColorMatrixFilter |
Overerving | ColorMatrixFilter BitmapFilter Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Opmerking: bij RGBA-waarden vertegenwoordigt de meest significante byte de waarde van het rode kanaal, gevolgd door groen, blauw en vervolgens alpha.
U kunt een nieuw kleurenmatrixfilter maken met de syntaxis new ColorMatrixFilter()
. 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 eigenschap cacheAsBitmap
van het weergaveobject op true
ingesteld. Wanneer u alle filters verwijdert, 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 bereikt.
Verwante API-elementen
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
matrix : Array
Array van 20 items voor 4 x 5 kleurtransformatie. | ColorMatrixFilter |
Methode | Gedefinieerd door | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Initialiseert een nieuwe instantie ColorMatrixFilter met de opgegeven parameters. | ColorMatrixFilter | ||
[overschrijven]
Retourneert een kopie van dit filterobject. | ColorMatrixFilter | ||
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 |
matrix | eigenschap |
matrix:Array
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Array van 20 items voor 4 x 5 kleurtransformatie. U kunt de eigenschap matrix
niet wijzigen door de waarde ervan rechtstreeks te wijzigen (bijvoorbeeld myFilter.matrix[2] = 1;
). U moet in plaats hiervan een verwijzing naar de array maken, de wijziging in de verwijzing doorvoeren en de waarde herstellen.
De kleurmatrixfilter scheidt elke bronpixel in rode, groene, blauwe en alpha-componenten zoals srcR, srcG, srcB en srcA. Wanneer u het resultaat van elk van de vier kanalen wilt berekenen, moet u de waarde van elke pixel in de afbeelding vermenigvuldigen met de waarden in de transformatiematrix. Een verschuiving tussen -255 en 255 kan optioneel aan elk resultaat worden toegevoegd (het vijfde item in elke rij van de matrix). De filter combineert iedere kleurcomponent weer tot een pixel en schrijft het resultaat uit. In de volgende formule komen a[0] tot en met a[19] overeen met de items 0 tot en met 19 in de array van 20 items die wordt doorgegeven aan de eigenschap 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]
Voor elke kleurwaarde in de array geldt dat 1 betekent dat 100% van dat kanaal wordt verzonden naar de uitvoer, waardoor de waarde van het kleurkanaal behouden blijft.
De berekeningen worden op niet-vermenigvuldigde kleurwaarden uitgevoerd. Wanneer de invoerafbeelding uit vooraf vermenigvuldigde kleurwaarden bestaat, worden deze waarden automatisch omgezet in niet-vermenigvuldigde kleurwaarden voor deze bewerking.
Er zijn twee geoptimaliseerde modi beschikbaar:
Alleen alpha. Wanneer u een filter aan een matrix doorgeeft die alleen het alpha-component aanpast, zoals hier wordt getoond, optimaliseert het filter de prestaties:
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)
Snellere versie. Alleen beschikbaar bij processors met een SSE-/Altivec-versneller, zoals Intel ® Pentium ® 3 en hoger en Apple ® G4 en hoger. De versneller wordt gebruikt wanneer het bereik van de vermenigvuldigertermen tussen -15,99 en 15,99 ligt en het bereik van de optellertermen a[4], a[9], a[14] en a[19] binnen het bereik -8000 en 8000 ligt.
Implementatie
public function get matrix():Array
public function set matrix(value:Array):void
Gegenereerde uitzondering
TypeError — De array is null wanneer deze wordt ingesteld.
|
ColorMatrixFilter | () | Constructor |
public function ColorMatrixFilter(matrix:Array = null)
Taalversie: | ActionScript 3.0 |
Runtimeversies: | AIR 1.0, Flash Player 9 |
Initialiseert een nieuwe instantie ColorMatrixFilter met de opgegeven parameters.
Parametersmatrix:Array (default = null ) — Een array met 20 elementen die zijn gerangschikt in een 4 x 5 matrix.
|
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 — Een nieuwe instantie ColorMatrixFilter waarvan alle eigenschappen hetzelfde zijn als de originele instantie.
|
buildChild()
viermaal aan om vier instanties van de afbeelding te laden en weer te geven. De eerste aanroep van buildChild()
neemt null
als argument, waarbij geen filter op de eerste instantie wordt toegepast. Elke volgende aanroep van buildChild()
neemt als argument een functie die een verschillend kleurmatrixfilter op elke volgende instantie van de afbeelding toepast.
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 applyRed()
, applyGreen()
enapplyBlue()
gebruiken verschillende waarden voor de array matrix
om verschillende effecten 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.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); } } }
Wed Jun 13 2018, 11:42 AM Z