topical media & game development

talk show tell print

#graphic-flex-image-effects-09-Flex-StackedText.ax

#graphic-flex-image-effects-09-Flex-StackedText.ax [swf] [flash] flex


  package {
  
          import aether.utils.Adjustments;
          import aether.utils.ImageUtil;
  
          import flash.display.Bitmap;
          import flash.display.BitmapData;
          import flash.display.BitmapDataChannel;
          import flash.display.Sprite;
          import flash.filters.BitmapFilter;
          import flash.filters.BlurFilter;
          import flash.filters.DropShadowFilter;
          import flash.filters.GlowFilter;
          import flash.geom.Point;
          import flash.text.TextField;
          import flash.text.TextFieldAutoSize;
          import flash.text.TextFormat;
  
          [SWF(width=800, height=450, backgroundColor=0x000000)]
  
          
Demonstrates how complex text effects can be created by expanding or contracting textfields using blurring and levels, then stacking these expanded or contracted fields and applying effects.

  
          public class @ax-graphic-flex-image-effects-09-Flex-StackedText extends Sprite {
  
                  
Constructor. Creates fields, generated multiple bitmaps from each and applies effects.

  
                  public function @ax-graphic-flex-image-effects-09-Flex-StackedText() {
                          // make sure Impact is installed
                          var field:TextField = createField("FIELD ONE", new TextFormat("Impact", 100));
                          // draws field into bitmap data
                          var bitmapData:BitmapData = ImageUtil.getBitmapData(field);
                          // applies filter effect
                          filterImageOne(bitmapData);
                          var bitmap:Bitmap = new Bitmap(bitmapData);
                          bitmap.x = (stage.stageWidth - bitmap.width)/2;
                          bitmap.y = 20;
                          addChild(bitmap);
  
                          // process is repeated for two more fields
                          field = createField("FIELD TWO", new TextFormat("Impact", 100));
                          bitmapData = ImageUtil.getBitmapData(field);
                          filterImageTwo(bitmapData);
                          bitmap = new Bitmap(bitmapData);
                          bitmap.x = (stage.stageWidth - bitmap.width)/2;
                          bitmap.y = stage.stageHeight/3 + 20;
                          addChild(bitmap);
  
                          field = createField("FIELD THREE", new TextFormat("Times New Roman", 100));
                          bitmapData = ImageUtil.getBitmapData(field);
                          filterImageThree(bitmapData);
                          bitmap = new Bitmap(bitmapData);
                          bitmap.x = (stage.stageWidth - bitmap.width)/2;
                          bitmap.y = stage.stageHeight*2/3 + 20;
                          addChild(bitmap);
                  }
  
                  
Creates a textfield with the specified text and format.
parameter: text The text to add to the field.
parameter: format The text format to apply to the field.
returns: The textfield created.

  
                  private function createField(text:String, format:TextFormat):TextField {
                          var field:TextField = new TextField();
                          field.defaultTextFormat = format;
                          field.autoSize = TextFieldAutoSize.LEFT;
                          field.text = text;
                          return field;
                  }
  
                  
Applies filters to first field, which is drawn into bitmap data.
parameter: source The bitmap data to apply filters to.

  
                  private function filterImageOne(source:BitmapData):void {
                          // creates transparent bitmap data in which beveled image will be drawn
                          var destination:BitmapData = new BitmapData(
                                  source.width,
                                  source.height,
                                  true,
                                  0x00000000
                          );
                          addLayer(
                                  source,
                                  destination,
                                  0xFFFF0000,
                                  10,
                                  90
                          );
                          addLayer(
                                  source,
                                  destination,
                                  0xFF000000,
                                  10,
                                  180
                          );
                          addLayer(
                                  source,
                                  destination,
                                  0xFFFFFFFFF,
                                  10,
                                  200
                          );
                          ImageUtil.copyPixels(destination, source);
                  }
  
                  
Applies filters to second field, which is drawn into bitmap data.
parameter: source The bitmap data to apply filters to.

  
                  private function filterImageTwo(source:BitmapData):void {
                          // creates transparent bitmap data in which beveled image will be drawn
                          var destination:BitmapData = new BitmapData(
                                  source.width,
                                  source.height,
                                  true,
                                  0x00000000
                          );
                          var filters:Vector.<BitmapFilter> = new Vector.<BitmapFilter>();
                          filters.push(new DropShadowFilter(3, 45, 0xFFFFFF, .8, 5, 5, 1, 1, true, true));
                          addLayer(
                                  source,
                                  destination,
                                  0xFF000000,
                                  10,
                                  80,
                                  filters
                          );
                          filters = new Vector.<BitmapFilter>();
                          filters.push(new DropShadowFilter(3, 45, 0xFFFFFF, .8, 5, 5, 1, 1, true));
                          filters.push(new DropShadowFilter(3, 225, 0xFFFFFF, .1, 5, 5, 1, 1, true));
                          addLayer(
                                  source,
                                  destination,
                                  0xFF121212,
                                  8,
                                  200,
                                  filters
                          );
                          filters = new Vector.<BitmapFilter>();
                          filters.push(new DropShadowFilter(3, 225, 0x66FFFF, .2, 3, 3, 1, 1, true, true));
                          addLayer(
                                  source,
                                  destination,
                                  0xFF000000,
                                  10,
                                  230,
                                  filters
                          );
                          ImageUtil.copyPixels(destination, source);
                  }
  
                  
Applies filters to third field, which is drawn into bitmap data.
parameter: source The bitmap data to apply filters to.

  
                  private function filterImageThree(source:BitmapData):void {
                          // creates transparent bitmap data in which beveled image will be drawn
                          var destination:BitmapData = new BitmapData(
                                  source.width,
                                  source.height,
                                  true,
                                  0x00000000
                          );
                          var filters:Vector.<BitmapFilter> = new Vector.<BitmapFilter>();
                          filters.push(new GlowFilter(0x9922FF, 1, 8, 8, 2, 1, false, true));
                          addLayer(
                                  source,
                                  destination,
                                  0xFF000000,
                                  8,
                                  90,
                                  filters
                          );
                          filters = new Vector.<BitmapFilter>();
                          filters.push(new GlowFilter(0xCC55FF, 1, 6, 6, 2, 1, true, true));
                          addLayer(
                                  source,
                                  destination,
                                  0xFF000000,
                                  8,
                                  160,
                                  filters
                          );
                          filters = new Vector.<BitmapFilter>();
                          filters.push(new GlowFilter(0xEEAAFF, 1, 6, 6, 2, 1, true, true));
                          addLayer(
                                  source,
                                  destination,
                                  0xFF000000,
                                  10,
                                  230,
                                  filters
                          );
                          ImageUtil.copyPixels(destination, source);
                  }
  
                  
Captures the alpha channel from an image, then blurs it and applies a threshold in order to thicken or thin opaque pixels of image. The resulting alpha channel is copied into bitmap data with a specified fill and a bevel is applied.
parameter: source The source bitmap data image.
parameter: destination The image in which the effect will be drawn.
parameter: fillColor The color of the resulting image.
parameter: blurAmoun The amount to blur the image before the threshold is applied.
parameter: threshold The threshold to apply, which will determine how thick or thin the image will be.
parameter: filters A vector of filters to apply to the resulting image.

  
                  private function addLayer(
                          source:BitmapData,
                          destination:BitmapData,
                          fillColor:uint,
                          blurAmount:Number,
                          threshold:uint,
                          filters:Vector.<BitmapFilter>=null
                  ):void {
                          // create grayscale image from alpha channel of source
                          var alpha:BitmapData = ImageUtil.getChannelData(source, BitmapDataChannel.ALPHA);
                          // blur the grayscale image
                          ImageUtil.applyFilter(alpha, new BlurFilter(blurAmount, blurAmount));
                          // apply a threshold to the blurred image
                          Adjustments.setLevels(alpha, threshold-20, threshold, threshold+20);
                          // blur the threshold result to soften pixelation
                          ImageUtil.applyFilter(alpha, new BlurFilter(1.5, 1.5));
                          // create a new image that is a solid color
                          var bevel:BitmapData = source.clone();
                          bevel.fillRect(bevel.rect, fillColor);
                          // copy the altered alpha channel into solid color bitmap data
                          bevel.copyChannel(
                                  alpha,
                                  alpha.rect,
                                  new Point(),
                                  BitmapDataChannel.RED,
                                  BitmapDataChannel.ALPHA
                          );
                          // apply filters
                          for each (var filter:BitmapFilter in filters) {
                                  ImageUtil.applyFilter(bevel, filter);
                          }
                          // draw beveled image into destination bitmap data
                          destination.draw(bevel);
                  }
  
          }
  
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.