In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: ImageWarp (webcam)

I was just bored.  Felt like playing with Displacement Maps
Get Adobe Flash player
by dx0ne 12 Jul 2011
// forked from PESakaTFM's ImageWarp (webcam)
/**
* I was just bored.  Felt like playing with Displacement Maps
*/
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BlendMode;
    import flash.display.Graphics;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;
    import flash.filters.DisplacementMapFilter;
    import flash.filters.DisplacementMapFilterMode;
    import flash.geom.Point;
    import flash.media.Camera;
    import flash.media.Video;

    public class ImageWarp extends Sprite
    {
        protected var camera:Camera;
        protected var video:Video;
        
        protected var map:BitmapData;
        protected var mapBMP:Bitmap;
        protected var mp:Point;
        protected var brush:Shape;
        protected var displace:DisplacementMapFilter;
        
        public var brushSize:Number = 30;
        public var blurStrength:Number = 40;
        public var brushStrength:Number = .05;
        
        public function ImageWarp()
        {
            Wonderfl.capture_delay( 10 );
            
            camera = Camera.getCamera();
            camera.setMode(465, 465, 30);
            video = new Video(465, 465);
            video.attachCamera(camera);
            
            addChild(video)
            
            
            brush = new Shape();
            brush.filters = [new BlurFilter(blurStrength, blurStrength, 2)];
            mp = new Point();
            
            map = new BitmapData(465, 465, false, 0x800080);
            mapBMP = new Bitmap(map)
            mapBMP.alpha=1;
           // addChild(mapBMP);
            
            displace = new DisplacementMapFilter(map, new Point(), 2, 1, 100, 100, DisplacementMapFilterMode.CLAMP);
            video.filters = [displace];
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        }
        
        protected function onMouseDown(event:MouseEvent):void
        {
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            
            mp.x = mouseX;
            mp.y = mouseY;
        }
        
        protected function onMove(event:MouseEvent):void
        {
            var dy:Number = mp.y - mouseY;
            var dx:Number = mp.x - mouseX;
            var c:Number = Math.sqrt(dx*dx + dy*dy);
            
            var color:uint = 0xFF;
            
            var g:Graphics = brush.graphics;
            g.clear();
            g.lineStyle(brushSize, color, brushStrength*Math.abs(dx/c));
            g.moveTo(mp.x, mp.y)
            g.lineTo(mouseX, mouseY);
            
            map.draw(brush, null, null, (dx>0)?BlendMode.ADD:BlendMode.SUBTRACT, null, true);
            
            color = 0xFF0000;
            
            g.clear();
            g.lineStyle(brushSize, color, brushStrength*Math.abs(dy/c));
            g.moveTo(mp.x, mp.y)
            g.lineTo(mouseX, mouseY);
            
            map.draw(brush, null, null, (dy>0)?BlendMode.ADD:BlendMode.SUBTRACT, null, true);
            
            displace.mapBitmap = map;
            video.filters = [displace];
            
            mp.x = mouseX;
            mp.y = mouseY;
        }
        
        protected function onMouseUp(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMove);
            stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
        }
    }
}