forked from: LEGO

by jmp909 forked from LEGO (diff: 2)
♥0 | Line 112 | Modified 2010-03-23 23:42:42 | MIT License
play

ActionScript3 source code

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

// forked from abakane's LEGO
package{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.geom.*;
	import flash.filters.*;
	import flash.system.LoaderContext;
	[SWF(width=465, height=465, backgroundColor=0x0, frameRate=60)]
	
	public class S091214 extends Sprite{
		private const URL:String = "http://photos-f.ak.fbcdn.net/hphotos-ak-ash1/hs274.ash1/20133_250740840852_709505852_4778111_6530_n.jpg";
		private var _blocks:Array;
		private var _source:BitmapData;
		private var _canvas:BitmapData;
		private var p:Point = new Point(0, 0);
		private static const W:uint = 10;
		private static const H:uint = 10;
	
		public function S091214(){
			if( stage ) init();
			else addEventListener( Event.ADDED_TO_STAGE, init);//
            Wonderfl.capture_delay(60);
        }
		
		private function init( e:Event=null ):void
		{
			removeEventListener( Event.ADDED_TO_STAGE, init);//
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete);//
			loader.load( new URLRequest(URL), new LoaderContext(true) );
		}
		
		private function onComplete( e:Event ):void
		{
			e.target.removeEventListener( Event.COMPLETE, onComplete);//
			var bmpd:BitmapData = e.target.content.bitmapData;
			var m:Matrix = new Matrix();
			m.scale( 1/W, 1/H);
			_source = new BitmapData( bmpd.width/W, bmpd.height/H, false, 0x0);
			_source.draw( bmpd, m);
			_source.applyFilter( _source, _source.rect, p, new ColorMatrixFilter([ 0.3, 0.6, 0.1, 0, 0, 0.3, 0.6, 0.1, 0, 0, 0.3, 0.6, 0.1, 0, 0, 0, 0, 0, 1, 0]));
			_canvas = new BitmapData( _source.width*W, _source.height*H, false, 0x0);
			addChild( new Bitmap(_canvas) );
			setup();//
			addEventListener( Event.ENTER_FRAME, update);
		}
		
		private function update( e:Event ):void
		{
			plot();
			plot();
			plot();
			plot();
			plot();
		}

		private function plot():void
		{
			var m:Matrix = new Matrix();
			m.translate( p.x*W, p.y*H);
			_canvas.draw( _blocks[ brightness(p) ], m);
			if( ++p.x > _source.width ){
				p.x = 0;
				if( ++p.y > _source.height ){
					removeEventListener( Event.ENTER_FRAME, update);//
					return;
				}
			} 
		}

		private function brightness( _p:Point ):uint
		{
			var c:uint = _source.getPixel( _p.x, _p.y) & 0xFF;
			return (c/(51.2) | 0);
		}
		
		private function setup():void
		{
			_blocks = [];
			_blocks[0] = block( [0x1a1a1a, 0x595959, 0x3c3c3c, 0x333333, 0x000000, 0x000000, 0x3c3c3c, 0x080808] );
			_blocks[1] = block( [0x4d4d4d, 0x8d8d8d, 0x717171, 0x585858, 0x2e2e2e, 0x1c1c1c, 0x7a7a7a, 0x2e2e2e] );
			_blocks[2] = block( [0x808080, 0xd1d1d1, 0xb3b3b3, 0x9b9b9b, 0x595959, 0x3e3e3e, 0xa6a6a6, 0x595959] );
			_blocks[3] = block( [0xb3b3b3, 0xececec, 0xd9d9d9, 0xc7c7c7, 0x8f8f8f, 0x727272, 0xd9d9d9, 0x7d7d7d] );
			_blocks[4] = block( [0xe6e6e6, 0xf9f9f9, 0xf3f3f3, 0xe2e2e2, 0xc4c4c4, 0xa7a7a7, 0xffffff, 0xb8b8b8] );
		}
		
		private function block( _ary:Array ):BitmapData
		{
			var s:Shape = new Shape();
			var g:Graphics = s.graphics;
			g.beginFill(_ary[0]);
			g.drawRect( 0, 0, 10, 10);
			g.beginFill(_ary[1]);
			g.drawRect( 0, 0, 1, 1);
			g.beginFill(_ary[2]);
			g.drawRect( 1, 0, 8, 1);
			g.drawRect( 0, 1, 1, 8);
			g.beginFill(_ary[3]);
			g.drawRect( 9, 0, 1, 1);
			g.drawRect( 0, 9, 1, 1);
			g.beginFill(_ary[4]);
			g.drawRect( 9, 1, 1, 8);
			g.drawRect( 1, 9, 8, 1);
			g.beginFill(_ary[5]);
			g.drawRect( 9, 9, 1, 1);
			g.beginFill(_ary[6]);
			g.drawRect( 4, 2, 2, 1);
			g.drawRect( 3, 3, 1, 1);
			g.drawRect( 6, 3, 1, 1);
			g.drawRect( 2, 4, 1, 2);
			g.beginFill(_ary[7]);
			g.drawRect( 7, 4, 1, 2);
			g.drawRect( 3, 6, 1, 1);
			g.drawRect( 6, 6, 1, 1);
			g.drawRect( 4, 7, 2, 1);
			var bmpd:BitmapData = new BitmapData( W, H, false, 0xFFFFFF);
			bmpd.draw( s );
			return bmpd;
		}
	
	}
}