/**
* 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>();
}