forked from: prog.hu: Flash MovieClip Transform AS3
forked from prog.hu: Flash MovieClip Transform AS3 (diff: 16)
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)];
}
}
}
