Arceringen als filter gebruiken

Flash Player 10 of hoger, Adobe AIR 1.5 of hoger

Het gebruik van een arcering als filter is vergelijkbaar met het gebruik van andere filters in ActionScript. Als u een arcering als filter gebruikt, wordt de gefilterde afbeelding (een weergave- of BitmapData-object) doorgegeven aan de arcering. De arcering gebruikt de invoerafbeelding om de filteruitvoer te maken. Dit is doorgaans een gewijzigde versie van de oorspronkelijke afbeelding. Als het gefilterde object een weergaveobject is, wordt de uitvoer van de arcering op het scherm weergegeven in plaats van het gefilterde weergaveobject. Als het gefilterde object een BitmapData-object is, wordt de uitvoer van de arcering de inhoud van het BitmapData-object waarvan de methode applyFilter() is aangeroepen.

Wanneer u een arcering als filter wilt gebruiken, maakt u eerst het Shader-object zoals is beschreven in Arceringen laden of insluiten . Vervolgens maakt u een ShaderFilter-object dat is gekoppeld aan het Shader-object. Het ShaderFilter-object is het filter dat wordt toegepast op het gefilterde object. U kunt het op dezelfde manier als een ander filter toepassen op een object. U geeft het filter door aan de eigenschap filters van een weergaveobject of u roept de methode applyFilter() aan voor een BitmapData-object. Met de volgende voorbeeldcode wordt een ShaderFilter-object gemaakt en het filter toegepast op het weergaveobject homeButton :

var myFilter:ShaderFilter = new ShaderFilter(myShader); 
homeButton.filters = [myFilter];

Wanneer u een arcering als filter gebruikt, moet de arcering met ten minste één invoer zijn gedefinieerd. Zoals u in het voorbeeld ziet, stelt u de invoerwaarde niet in de code in. In plaats daarvan wordt het gefilterde weergave- of BitmapData-object ingesteld als invoerafbeelding. Als u een arcering gebruikt die meer dan één invoer verwacht, geeft u voor elke invoer na de eerste invoer een waarde op.

In sommige gevallen verandert een filter de afmetingen van de oorspronkelijke afbeelding. Een slagschaduweffect voegt bijvoorbeeld extra pixels toe aan de schaduw die is toegevoegd aan de afbeelding. Wanneer u een arcering gebruikt die de afmetingen van de afbeelding wijzigt, stelt u de eigenschappen leftExtension , rightExtension , topExtension en bottomExtension in om aan te geven in welke mate u de grootte van de afbeelding wilt veranderen.

In het volgende voorbeeld ziet u hoe u een arcering als filter gebruikt. Het filter in dit voorbeeld keert de waarden voor het rode, groene en blauwe kanaal van een afbeelding om. Het resultaat is de “negatieve” versie van de afbeelding.

Opmerking: De arcering die in dit voorbeeld wordt gebruikt, is de Pixel Bender-kernel invertRGB.pbk die deel uitmaakt van de Pixel Bender Toolkit. U kunt de broncode voor de kernel laden vanuit de installatiemap van de Pixel Bender Toolkit. Compileer de broncode en sla het bestand met bytecode op in dezelfde map als de broncode.

De belangrijke ActionScript-code heeft deze twee methoden:

  • init() : de methode init() wordt aangeroepen wanneer de toepassing wordt geladen. In deze methode laadt de code het bytecodebestand voor de arcering.

  • onLoadComplete() : in de methode onLoadComplete() maakt de code het Shader-object shader . Vervolgens wordt de inhoud van het object target gemaakt en getekend. Het object target is een rechthoek gevuld met een lineair kleurverloop dat rood is aan de linkerzijde, geel-groen in het midden en lichtblauw aan de rechterzijde. Het ongefilterde object ziet er zo uit:

    Nadat het filter is toegepast, zijn de kleuren omgekeerd en ziet de rechthoek er zo uit:

De arcering die in dit voorbeeld wordt gebruikt, is de Pixel Bender-kernel invertRGB.pbk die deel uitmaakt van de Pixel Bender Toolkit. De broncode is beschikbaar in het bestand invertRGB.pbk in de installatiemap van de Pixel Bender Toolkit. Compileer de broncode en sla het bytecodebestand op onder de naam invertRGB.pbj in dezelfde map als de ActionScript-broncode.

Hier volgt de ActionScript-code voor dit voorbeeld. Gebruik deze klasse als de hoofdtoepassingsklasse voor een alleen-ActionScript-project in Flash Builder of als de documentklasse voor het FLA-bestand in Flash Professional:

package 
{ 
    import flash.display.GradientType; 
    import flash.display.Graphics; 
    import flash.display.Shader; 
    import flash.display.Shape; 
    import flash.display.Sprite; 
    import flash.filters.ShaderFilter; 
    import flash.events.Event; 
    import flash.geom.Matrix; 
    import flash.net.URLLoader; 
    import flash.net.URLLoaderDataFormat; 
    import flash.net.URLRequest; 
     
    public class InvertRGB extends Sprite 
    { 
        private var shader:Shader; 
        private var loader:URLLoader; 
         
        public function InvertRGB() 
        { 
            init(); 
        } 
         
        private function init():void 
        { 
            loader = new URLLoader(); 
            loader.dataFormat = URLLoaderDataFormat.BINARY; 
            loader.addEventListener(Event.COMPLETE, onLoadComplete); 
            loader.load(new URLRequest("invertRGB.pbj")); 
        } 
         
         
        private function onLoadComplete(event:Event):void 
        { 
            shader = new Shader(loader.data); 
             
            var target:Shape = new Shape(); 
            addChild(target); 
             
            var g:Graphics = target.graphics; 
            var c:Array = [0x990000, 0x445500, 0x007799]; 
            var a:Array = [255, 255, 255]; 
            var r:Array = [0, 127, 255]; 
            var m:Matrix = new Matrix(); 
            m.createGradientBox(w, h); 
            g.beginGradientFill(GradientType.LINEAR, c, a, r, m); 
            g.drawRect(10, 10, w, h); 
            g.endFill(); 
             
            var invertFilter:ShaderFilter = new ShaderFilter(shader); 
            target.filters = [invertFilter]; 
        } 
    } 
}

Zie Filters maken en toepassen voor meer informatie over het toepassen van filters.