forked from: flash on 2009-11-3

by dotf
♥0 | Line 85 | Modified 2009-11-12 11:09:47 | MIT License
play

ActionScript3 source code

/**
 * Copyright dotf ( http://wonderfl.net/user/dotf )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/hHeF
 */

// forked from flern's flash on 2009-11-3
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.display.GradientType;
    import flash.display.SpreadMethod;
    import flash.display.Sprite;
    import flash.filters.BitmapFilter;
    import flash.filters.DisplacementMapFilter;
    import flash.filters.DisplacementMapFilterMode;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    
    public class DisplacementMapFilterExample extends Sprite {
        private var bgColor:uint     = 0x80FF00;
        private var size:uint        = 200;
        private var offset:uint      = 90;
        private var labelText:String = "Watch the text bend with the displacement map";

        public function DisplacementMapFilterExample() {
            var bitmapData:BitmapData = new BitmapData(size, size, false, bgColor);
            var bitmap:Bitmap = new Bitmap(bitmapData);
            var rect:Rectangle = new Rectangle(size/2 - 20, size/2 - 20, 40, 40);
            bitmapData.draw(this, new Matrix());
            bitmapData.fillRect(rect, 0x0000FF);

            var cloneData:BitmapData = bitmapData.clone();      
            var bitmapClone:Bitmap = new Bitmap(cloneData);
            bitmapClone.x = 200;
            addChild(bitmapClone);
            bitmap.filters = new Array(getBitmapFilter());
            addChild(bitmap);      
            
            
               draw();
            createLabel();
            createFilter();
        }

        private function createFilter():void {
            var filter:BitmapFilter = getBitmapFilter();
            filters = new Array(filter);
        }

        private function getBitmapFilter():BitmapFilter {
            var mapBitmap:BitmapData = createBitmapData();
            var mapPoint:Point       = new Point(0, 0);
            var channels:uint        = BitmapDataChannel.BLUE;
            var componentX:uint      = channels;
            var componentY:uint      = channels;
            var scaleX:Number        = 0;
            var scaleY:Number        = 80;
            var mode:String          = DisplacementMapFilterMode.WRAP;
            var color:uint           = 0xFF0000;
            var alpha:Number         = 1.0;
            return new DisplacementMapFilter(mapBitmap,
                                             mapPoint,
                                             componentX,
                                             componentY,
                                             scaleX,
                                             scaleY,
                                             mode,
                                             color,
                                             alpha);
        }

        private function draw():void {
            var matrix:Matrix = new Matrix();
            matrix.createGradientBox(size, size);
//            graphics.beginFill(0xFF0000);
          //  graphics.beginGradientFill(GradientType.RADIAL,
          //                             [0xFF0000, 0x0000FF],
          //                             [100, 100],
          //                             [55, 200],
          //                             matrix,
          //                             SpreadMethod.PAD);
            graphics.drawRect(0, 0, size, size);
        }

        private function createBitmapData():BitmapData {
            var bitmapData:BitmapData = new BitmapData(size, size, false, bgColor);
            bitmapData.draw(this, new Matrix());
            var bitmap:Bitmap = new Bitmap(bitmapData);
            return bitmapData;
        }

        private function createLabel():void {
            var matrix:Matrix = new Matrix();
            matrix.createGradientBox(size, size);
            graphics.beginFill(0xFF0000);
            graphics.beginGradientFill(GradientType.RADIAL,
                                       [0xFF0000, 0x0000FF],
                                       [100, 100],
                                       [55, 200],
                                      matrix,
                                      SpreadMethod.PAD);
            graphics.drawRect(0, 0, size, size);

          //  var tf:TextField = new TextField();
          //  tf.text = labelText;
          //  tf.y = offset;
          //  tf.width = size;
          //  addChild(tf);
        }
    }
}