forked from: prog.hu: Flash MovieClip Transform AS3

by szbzs2004 forked from prog.hu: Flash MovieClip Transform AS3 (diff: 16)
♥0 | Line 39 | Modified 2011-08-18 23:54:07 | MIT License | (replaced)
play

ActionScript3 source code

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

// forked from szbzs2004's prog.hu: Flash MovieClip Transform AS3
package {

    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.DisplacementMapFilter;
    import flash.filters.DisplacementMapFilterMode;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.net.URLRequest;
    import flash.system.LoaderContext;
    
    public class ImageBend extends Sprite {

        private var pic:Loader;
        private var originalImage:Bitmap;
        
        public function ImageBend() {
            pic = new Loader();
            pic.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
            pic.load(new URLRequest("http://assets.wonderfl.net/images/related_images/a/ae/aec3/aec30fea75d59f0c9d5344f5aa1c220888968111"), new LoaderContext(true));
        }
                
        private function loadComplete(e:Event):void {
            originalImage = new Bitmap((pic.content as Bitmap).bitmapData);
            addChild(originalImage);
            pic.x += pic.width + 10;
            addChild(pic);
            bend(pic, 15);
        }
        
        private function bend(p:DisplayObject, a:Number):void {
            var dpmBmData:BitmapData = new BitmapData(p.width, p.height + a, false);
            for (var i:uint = 0; i < dpmBmData.width; ++i) {
// edited 2011-aug-18
// there was a litte bug, if (width % 2 == 0) then the middle column not distorted, because then (c == 0x00000100)
// and a little "cosmetics": the last pixelcomun was also distorted, because then (c != 0x80),
// precondition: p.width >= 2
//              var c:uint = 0x80 + 0x80 * Math.sin(Math.PI * i / dpmBmData.width);
                var c:uint = 0x80 + 0x7f * Math.sin(Math.PI * i / (dpmBmData.width - 1));
                dpmBmData.fillRect(new Rectangle(i, 0, 1, dpmBmData.height), c);
            }
            p.filters = [new DisplacementMapFilter(dpmBmData, new Point(0, 0), BitmapDataChannel.BLUE, BitmapDataChannel.BLUE, 0, -2 * a, DisplacementMapFilterMode.COLOR, 0, 0)];
        }    
    }
}

Forked