ActiveGaussBlur (part 1)

by bradsedito
♥0 | Line 150 | Modified 2010-12-06 08:13:03 | MIT License
play

ActionScript3 source code

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

// bradsedito
// twitter.com/bradsedito
// 



package {
    import flash.display.*;
    import flash.events.*;
    import flash.filters.*;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.net.URLRequest;
    import flash.system.LoaderContext;
    import flash.text.TextField;


    public class PixelPhoto extends Sprite {
        
        private const _url:String = "http://a2.twimg.com/profile_images/1138498994/me_default_pic.jpg";
//      private const _url:String = "http://commondatastorage.googleapis.com/bradsedito/images/whitebg.png";

                
        
        /**
         * Vectors for holding pixeldata
         */
        private var _pixels:PixelData = new PixelData();
        
        public var _random:Vector.<Point> = new Vector.<Point>();
               
        private var _bmp:Bitmap;
        private var _bmpd:BitmapData;   
        private var _bmp2:Bitmap;
        private var _bmpd2:BitmapData;   


        private var _loader:Loader = new Loader();   
        
        private var _count:int; 
        
        private var _offsetX:Number = 0.2;
        private var _interpol:Number = 0.2;
        
        private var _blur:BlurFilter;
        private var _colormatrix:ColorMatrixFilter;
        private var _rect:Rectangle;
        private var _rate:Number = 0.55;
        private var _deg:int = 0;
        private var _isgrowing:Boolean = true;
        
        private var _trace:TextField = new TextField();
        
        private var _cC:int = 50;
        private var _mouseOnStage:Boolean = false;
        private var _modulo:int = 2;
        
                   
        public function PixelPhoto()
        {
            //filters
            _blur = new BlurFilter(1.1,1.1,1);
            _trace.width = 500;
            
            _colormatrix = new ColorMatrixFilter([
               _rate,0,0,0,1,
               0,_rate,0,0,1,
               0,0,_rate,0,1,
               0,0,0,_rate,
            ]);
            
                        
            //these are for the applyFilter method
            _rect = new Rectangle(0,0,500,500);

            configureAssets();
        }

        private function configureAssets():void
        {
            
            stage.quality = "LOW";
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

            var request:URLRequest = new URLRequest(_url);
            _loader.x = -100;
            _loader.y = -100;
            _loader.load(request, new LoaderContext(true));
            _loader.name = 'test';                   
                        
        }

        private function completeHandler(event:Event):void 
        {
            _bmpd = new BitmapData(500,500);
             _bmp = new Bitmap(_bmpd);
             _bmp.x = -100;
             _bmp.y= -100;
            _bmpd2 = new BitmapData(500,500,false,0x000000);
             _bmp2 = new Bitmap(_bmpd2);   
             addChild(_bmp2);          
             var image:Bitmap = Bitmap(LoaderInfo(event.target).content);
             
            var i:int = 0;

            for(var x:int=0;x<image.width;x++)
            {
                for (var y:int=0;y<image.height;y++)
                {
                    _pixels.colors.push(image.bitmapData.getPixel(x,y));
                    _pixels.points.push(new Point(x,y));
                    _random.push(Point.polar(image.height-y,90*Math.random()));      
              }
            }  
            _pixels.positions = _pixels.points;  
            
            addChild(_bmp);
            
            _count = _pixels.points.length;
            for(i=0;i<_count;i++)
            {
                 _bmp.bitmapData.setPixel(100 + _pixels.points[i].x, 100 + _pixels.points[i].y, _pixels.colors[i]); 
            }


            addChild(_trace);
            this.addEventListener(Event.ENTER_FRAME,update);    
            stage.addEventListener(MouseEvent.MOUSE_OUT, mouseOffStage);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseOnStage);                                        
        }
        
        private function update(event:Event):void
        {
            
           // _bmp.bitmapData.draw(_bmp2);
           _bmp.bitmapData.lock();
           _bmp2.bitmapData.lock();
           var cp:Point;
           var np:Point;
           var i:int;
           var tsX:Number
           var tsY:Number;
         
         
               for(i=0;i<_count;i++)
               {

                     if (i%_modulo==0)
                    {
                        cp = randomDirection(_pixels.positions[i]);
                   
                   np = Point.interpolate(_pixels.points[i],cp,0.995);
                   _pixels.positions[i] = np;
                   
                   _bmp.bitmapData.setPixel(100 + np.x, 100 + np.y, _pixels.colors[i]); 
                    }
                   
               }
       
               _offsetX += 0.01;


           _bmp.bitmapData.applyFilter(_bmpd, _rect, new Point(0, 0), _blur);
         
                _bmp.bitmapData.unlock();
           _bmp2.bitmapData.unlock();


      
        }
        
        private function mouseOnStage(e:MouseEvent):void
        {
            _mouseOnStage = true;
           
        }
        
        private function mouseOffStage(e:MouseEvent):void
        {
            _mouseOnStage = false;
            _modulo = 100;
        }


        
        private function ioErrorHandler(event:IOErrorEvent):void
        {
            trace("Unable to load image: " + _url);
        }
        
        private function trace(val:*):void
        {
            _trace.text = String ( val );
        }
        
        private function randomDirection(p:Point):Point
        {
            var rand:Number = Math.random();
            
            if (rand< 0.25)
                  p.x -= 1; // west
            else if (rand < 0.50)
                  p.y -= 1; // north
            else if (rand < 0.75)
                  p.x += 1; //east
            else
                  p.y += 1; //south                

            return p;
        }// randomDirection()

    }// class()
}// package



import flash.geom.Point;

class PixelData
{
    
    public var colors:Vector.<uint> = new Vector.<uint>();
    public var points:Vector.<Point> = new Vector.<Point>();  
    public var positions:Vector.<Point> = new Vector.<Point>();
    

}