/* * SPIRALDISTORT * * Trying to mimic Photoshop's spiral swirl filter. * * To recreate, you'll need to have the Flash9 ActionScript3 Preview installed, you can get it at http://labs.adobe.com/technologies/flash9as3preview/ * Create a new 200x200 FLA, and put 'SpiralDistort' (without quotes) as its Document Class. Test Movie et voila! * * @author Edwin Heijmen * @version 0.1 */ package { import flash.display.*; import flash.net.*; import flash.events.*; import flash.utils.Timer; public class SpiralDistort extends MovieClip { private var imageW:Number; // width private var imageH:Number; // height private var step:Number = 0; // step size private var angStep:Number = 0; // angle for each step private var angStepIncr:Number = 0.1; // increase angle private var radius:Number; // radius private var radius2:Number; // square of radius private var diameter:Number; // diameter private var cX:Number; // center horizontal private var cY:Number; // center vertical // used for loading image, displaying fractal and interaction private var img:Loader; private var bm:Bitmap; private var bmd:BitmapData; private var origData:BitmapData; public function SpiralDistort () { // constructor // // first load in picture img = new Loader(); img.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); var request:URLRequest = new URLRequest("ggoo_200x200.jpg"); img.load(request); } private function completeHandler (event:Event):void { // loading completed, now we can start digging around // // get width & height imageW = img.contentLoaderInfo.width; imageH = img.contentLoaderInfo.height; radius = Math.round(Math.min(imageW,imageH)/2); radius2 = radius*radius; diameter = 2*radius; cX = imageW/2; cY = imageH/2; // // first make sure we can distort image var image:Bitmap = Bitmap(img.content); origData = image.bitmapData; bmd = origData.clone(); bm = new Bitmap(bmd); addChild(bm); // // start distorting var myTimer:Timer = new Timer(0); myTimer.addEventListener("timer",distortImage); myTimer.start(); } private function distortImage (event:Event=null):void { // distort the image // var i2:uint; var dist:uint; var dsqrt:Number; var c:int; var inew:Number; var jnew:Number; var angle:Number; // loop over all possible candidates for distortion for (var i:int=-radius;i