forked from: forked from: 画像をピクセル化してみたよ ... @author axcel-work leonard76 forked:0favorite:0lines:115license : All rights reserved modified : 2009-04-15 01:45:00 Embed Tweet // forked from axcelwork's forked from: 画像をピクセル化してみたよ // forked from axcelwork's 画像をピクセル化してみたよ package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.system.Security; import net.hires.debug.Stats; /** * ... * @author axcel-work */ [ SWF( backgroundColor = "0x000000", frameRate = "30", width = "400", height = "320") ] public class Main extends Sprite { private var dispImage:Bitmap; private var baseImageData:BitmapData; private var canvasData:BitmapData; private var canvas:Bitmap; private var _pixel:Array = new Array(); private var _pixel_prepare:Array = new Array(); public function Main():void{ if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.scaleMode = "noScale"; stage.align = "left"; /* セキュリティポリシーをロード */ Security.loadPolicyFile( "http://www.shift-style.org/crossdomain.xml" ); /* 適当な画像をLoadするよ */ var _loader:Loader = new Loader(); _loader.load( new URLRequest( "http://www.shift-style.org/image/icon.jpg" ) ); var loaderInfo:LoaderInfo = _loader.contentLoaderInfo; loaderInfo.addEventListener( Event.COMPLETE, loaderCompleteHandler ); function loaderCompleteHandler( evt:Event ):void { baseImageData = new BitmapData( loaderInfo.width, loaderInfo.height, true, 0x00FFFFFF ); baseImageData.draw( _loader ); /* Canvasを表示 */ canvasData = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0x00FFFFFF ); addChild( new Bitmap( canvasData ) ); /* イベント定義 */ addEventListener( Event.ENTER_FRAME, update ); /* 画像から各ピクセルを配列へ */ cleatePixel(); addChild( new Stats() ); } } /* * メソッド:画像から各ピクセルを配列へ */ private function cleatePixel():void { for ( var i:int = 0; i <= baseImageData.width; i++ ) { for ( var j:int = 0; j <= baseImageData.height; j++ ) { var color:uint = baseImageData.getPixel32( i, j ); var p:pixcelParticle = new pixcelParticle( (stage.stageWidth/2 - baseImageData.width) + i*2, (stage.stageHeight/2 - baseImageData.height) + j*2, color, 0, 0 ); _pixel_prepare.push( p ); _pixel.push(p); } } this.stage.addEventListener(MouseEvent.CLICK, this._onClick); } /* * マウスイベントね */ private function _onClick(evt:MouseEvent):void { var n:int = this._pixel_prepare.length; var mx:int = this.stage.mouseX; var my:int = this.stage.mouseY; for(var i:int = 0; i < n; i++){ var p:pixcelParticle = this._pixel_prepare[i]; var dx:Number = p.x - mx + Math.random() * 5; var dy:Number = p.y - my + Math.random() * 5; var d:Number = dx * dx + dy * dy; var sqd:Number = Math.sqrt(d); var r:Number = Math.random() * 1 + 0.2; p.ax = dx / sqd * r; p.ay = dy / sqd * r; r = Math.random() * 2; p.vx = p.ax * r; p.vy = p.ay * r; } this._pixel_prepare = []; } /* * ここで各ピクセルを動かすよ */ private function update( evt:Event ):void { this.canvasData.lock(); this.canvasData.fillRect( this.canvasData.rect, 0x0 ); var n:int = this._pixel.length; var d:Number = 1.0; while (n--) { var p:pixcelParticle = this._pixel[n]; p.vx += p.ax; p.vy += p.ay; p.vx *= 0.99; p.vy *= 0.99; p.x += p.vx; p.y += p.vy; this.canvasData.setPixel(p.x, p.y, p.c); if (p.y < 0 || this.stage.stageHeight < p.y || p.x < 0 || this.stage.stageWidth < p.x) { this._pixel.splice(n, 1); } } this.canvasData.unlock(); if(_pixel.length == 0){ cleatePixel(); } } } } /* さくーしゃさんのアレ */ class pixcelParticle { public var x:Number; public var y:Number; public var vx:Number; public var vy:Number; public var ax:Number; public var ay:Number; public var c:int; public function pixcelParticle(x:Number, y:Number, color:uint, vx:Number, vy:Number) { this.x = x; this.y = y; this.vx = vx; this.vy = vy; this.ax = 0; this.ay = 0; this.c = color; } } Code Fullscreen Preview Fullscreen width MouseEvent.ADDED_TO_STAGE removeEventListener addEventListener frameRate height MouseEvent.COMPLETE Security.loadPolicyFile Stats splice MouseEvent.ENTER_FRAME MouseEvent.CLICK Math.sqrt MouseEvent push Array length Math.random uint int