Paket | flash.filters |
Klass | public final class ColorMatrixFilter |
Arv | ColorMatrixFilter BitmapFilter Object |
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9 |
Obs: För RGBA-värden betecknar den viktigaste byten det röda kanalvärdet, följt av det gröna, det blå och sedan alfa.
Använd syntaxen new ColorMatrixFilter()
om du vill skapa ett nytt färgmatrisfilter. Användningen av filter beror på för vilket objekt du tillämpar filtret:
- Om du vill använda filter på filmklipp, textfält, knappar och video använder du
filters
-egenskapen (ärvs från DisplayObject). Inställningar avfilters
-egenskaper i ett objekt ändrar inte objektet. Du kan ta bort filtret genom att rensa egenskapenfilters
. - Om du vill använda filter på BitmapData-objekt använder du metoden
BitmapData.applyFilter()
. OmapplyFilter()
anropas för ett BitmapData-objekt används BitmapData-källobjektet och filterobjektet för att generera en filtrerad bild som resultat.
Om du använder ett filter för att visa ett objekt, anges cacheAsBitmap
-egenskapen i visningsobjektet till true
. Om du tar bort alla filter återställs ursprungsvärdet cacheAsBitmap
.
Inget filter används om resultatbilden överskrider maxdimensionerna. I AIR 1.5 och Flash Player 10 är maxstorleken 8 191 pixlar i bredd eller höjd, och det totala antalet pixlar får inte överskrida 16 777 215 pixlar. (Om en bild är 8 191 pixlar bred kan den därför bara vara 2 048 pixlar hög.) I Flash Player 9 och tidigare och i AIR 1.1 och tidigare är begränsningen 2 880 pixlar i höjd och 2 880 pixlar i bredd. Om du till exempel zoomar in på ett stort filmklipp med ett filter, inaktiveras filtret om den resulterande bilden uppnår maxdimensionerna.
Relaterade API-element
flash.display.BitmapData.applyFilter()
flash.display.DisplayObject.filters
flash.display.DisplayObject.cacheAsBitmap
Egenskap | Definieras med | ||
---|---|---|---|
constructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans. | Object | ||
matrix : Array
En array med 20 element för 4 x 5-färgomformning. | ColorMatrixFilter |
Metod | Definieras med | ||
---|---|---|---|
ColorMatrixFilter(matrix:Array = null)
Initierar en ny ColorMatrixFilter-instans med de angivna parametrarna. | ColorMatrixFilter | ||
[åsidosätt]
Returnerar en kopia av det här filterobjektet. | ColorMatrixFilter | ||
Anger om det finns en egenskap angiven för ett objekt. | Object | ||
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter. | Object | ||
Anger om den angivna egenskapen finns och är uppräkningsbar. | Object | ||
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder. | Object | ||
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner. | Object | ||
Returnerar det angivna objektets strängbeteckning. | Object | ||
Returnerar det angivna objektets primitiva värde. | Object |
matrix | egenskap |
matrix:Array
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9 |
En array med 20 element för 4 x 5-färgomformning. Egenskapen matrix
kan inte ändras genom att dess värde ändras direkt (till exempel myFilter.matrix[2] = 1;
). Du måste i stället hämta en referens till arrayen, ändra i referensen och återställa värdet.
Färgmatrisfiltret delar upp varje källpixel i sina beståndsdelar rött, grönt, blått och alfa som srcR, srcG, srcB och srcA. Resultatet för var och en av de fyra kanalerna beräknas genom att värdet för varje pixel i bilden multipliceras med värdena i matrisomformningen. En förskjutning mellan -255 och 255 kan eventuellt läggas till i varje resultat (det femte objektet i varje rad i matrisen). Slutligen kombineras färgkomponenterna tillbaka till en enda pixel och resultatet skrivs ut. I följande formel motsvarar a[0] till a[19] post 0 till 19 i arrayen med 20 objekt som skickas till egenskapen 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]
Varje färgvärde i arrayen (ett värde på 1 är lika med 100 % för den kanal som skickas till utdata) behåller färgkanalens värde.
Beräkningarna utförs med omultiplicerade färgvärden. Om indatagrafiken består av förmultiplicerade färgvärden konverteras värdena automatiskt till omultiplicerade färgvärden för den här operationen.
Följande två optimeringslägen finns:
Endast Alfa. Om du skickar en matris som bara justerar alfakomponenten till filtret (vilket visas här) optimerar filtret dess prestanda:
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)
Snabbare version. Kan bara användas med SSE/Altivec-acceleratoraktiverade processorer som Intel ® Pentium ® 3 och senare och Apple ® G4 och senare. Acceleratorn används när multiplikationsfaktorerna är i intervallet -15,99 till 15,99 och additionstalen a[4], a[9], a[14] och a[19] är i intervallet -8 000 till 8 000.
Implementering
public function get matrix():Array
public function set matrix(value:Array):void
Utlöser
TypeError — Arrayen är null när den ställs in
|
ColorMatrixFilter | () | Konstruktor |
clone | () | metod |
override public function clone():BitmapFilter
Språkversion: | ActionScript 3.0 |
Körningsmiljöversioner: | AIR 1.0, Flash Player 9 |
Returnerar en kopia av det här filterobjektet.
ReturnerarBitmapFilter — En ny instans av ColorMatrixFilter med samma egenskaper som den ursprungliga instansen.
|
buildChild()
fyra gånger som läser in och visar fyra instanser av bilden. Det första anropet till buildChild()
tar null
som ett argument och inget filter tillämpas på den första instansen. Varje efterföljande anrop till buildChild()
tar en funktion som tillämpar ett annat färgmatrisfilter på varje efterföljande instans av bilden som argument.
Funktionen buildChild()
skapar ett nytt Loader-objekt med namnet loader
. För varje anrop till buildChild()
, lägger du till en händelseavlyssnare i Loader-objektet för att avlyssna complete
-händelser, som hanteras av funktionen buildChild()
.
Funktionerna applyRed()
, applyGreen()
och applyBlue()
använder olika värden för matrix
-arrayen för att få olika effekter.
Obs: Bäst resultat får du om du använder en bild som är ungefär 80 pixlar bred. Bildfilens namn och plats bör matcha värdet som du skickar till url
-egenskapen. Värdet som skickas till url
i exemplet pekar till exempel på en bildfil med namnet "Image.jpg" som finns i samma katalog som SWF-filen.
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, 01:40 PM Z