forked from: 点描風

by hacker_lra4mj5w forked from 点描風 (diff: 10)
コードは書き殴った感じで、きれいではないですけど。。
♥0 | Line 217 | Modified 2013-06-18 04:39:01 | MIT License
play

ActionScript3 source code

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

// forked from moringo2's 点描風
package{
    
    //コードは書き殴った感じで、きれいではないですけど。。
    import flash.display.*;
    import flash.net.*
    import flash.events.Event;
    import flash.geom.*;
    import flash.system.LoaderContext;
    
    import caurina.transitions.Tweener;
    
    
    public class IMTest extends MovieClip{
        
        private const imgPaths:Array = ["http://bit.ly/WuxWRd","http://bit.ly/WuxWRd","http://bit.ly/WuxWRd","http://bit.ly/WuxWRd","http://bit.ly/WuxWRd"];
        
        private var canvas:Sprite
        private var bm:Bitmap;
        private var bmd:BitmapData;
        private var pixels:Vector.<uint>;
        private var counter:int = 0;
        private var loader:Loader;
        
        public function IMTest(){
            addEventListener( Event.ADDED_TO_STAGE , init );
                
        }
        
        private function init(e:Event=null):void{
            counter = 0;
            canvas = new Sprite();
            addChild(canvas)
            loader = new Loader();
            loader.load(new URLRequest(imgPaths[Math.floor(Math.random()*6)]),new LoaderContext(true))
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,comp)
        }
        
        private function comp(e:Event):void{
            loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,comp)
            bm = loader.content as Bitmap;
            bmd = bm.bitmapData;
            pixels = bm.bitmapData.getVector(new Rectangle(0,0,bmd.width,bmd.height));            
            canvas.addEventListener(Event.ENTER_FRAME,drawCircle)
            
        }
        
        private function drawCircle(e:Event){
            var s:Sprite = e.target as Sprite;
            for(var i:int=0; i<40; i++){
                var randX:int = Math.floor(Math.random() * bmd.width)+1;
                var randY:int = Math.floor(Math.random() * bmd.height)+1;
                
                var pixelnumber:int = bmd.width*(randY-1) +randX;
                s.graphics.beginFill(hex(avgColor(pixelnumber)),Math.random()*0.6+0.4);
                s.graphics.drawCircle(randX,randY,Math.random()*5+1);
                s.graphics.endFill();
                
            }
            counter ++;
            if(counter >= 350){
                e.target.removeEventListener(Event.ENTER_FRAME,drawCircle)
                loader = null;
                removeChild(canvas);
                canvas = null;
                bm = null;
                bmd = null;
                init(null);
            }else{
                
            }
        }
        
        
        private function avgColor(pix:uint):Array{
            var p:Point = positionXY(pix);
            var targetPositions:Array
            if(p.x == 1 && p.y ==1){
                targetPositions = [1,2,3, 
                                    1+bmd.width, 1+bmd.width+1, 1+bmd.width+2,
                                    1+bmd.width*2, 1+bmd.width*2+1, 1+bmd.width*2+2];
            }else if(p.x == 2 && p.y ==1){
                targetPositions = [1,2,3,4,
                                    1+bmd.width, 1+bmd.width+1, 1+bmd.width+2, 1+bmd.width+3,
                                    1+bmd.width*2, 1+bmd.width*2+1, 1+bmd.width*2+2,1+bmd.width*2+3];
                
            }else if(p.x >= 3 && p.x <= bmd.width-2 && p.y == 1){
                targetPositions = [p.x-2, p.x-1, p.x, p.x+1, p.x+2,
                                   p.x+bmd.width-2, p.x+bmd.width-1, p.x+bmd.width, p.x+bmd.width+1, p.x+bmd.width+2,
                                   p.x+bmd.width*2-2, p.x+bmd.width*2-1, p.x+bmd.width*2, p.x+bmd.width*2+1, p.x+bmd.width*2+2 ]
            
            }else if(p.x == bmd.width-1 && p.y ==1){
                targetPositions = [p.x-2, p.x-1, p.x, p.x+1, 
                                   p.x+bmd.width-2, p.x+bmd.width-1, p.x+bmd.width, p.x+bmd.width+1, 
                                   p.x+bmd.width*2-2, p.x+bmd.width*2-1, p.x+bmd.width*2, p.x+bmd.width*2+1 ]
                
            }else if(p.x == bmd.width && p.y ==1){
                targetPositions = [p.x-2, p.x-1, p.x,
                                   p.x+bmd.width-2, p.x+bmd.width-1, p.x+bmd.width, 
                                   p.x+bmd.width*2-2, p.x+bmd.width*2-1, p.x+bmd.width*2 ]
            }else if(p.x == 1 && p.y ==2){
                targetPositions = [pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2, 
                                   pix, pix+1, p.x+2,
                                   pix+bmd.width, pix+bmd.width+1, pix+bmd.width+2, 
                                   pix+bmd.width*2, pix+bmd.width*2+1, pix+bmd.width*2+2 ]                            
            }else if(p.x == 2 && p.y ==2){
                targetPositions = [pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2, 
                                   pix-1, pix, pix+1, pix+2,
                                   pix+bmd.width-1, pix+bmd.width, pix+bmd.width+1, pix+bmd.width+2, 
                                   pix+bmd.width*2-1, pix+bmd.width*2, pix+bmd.width*2+1, pix+bmd.width*2+2 ]
                            
            }else if(p.x >= 3 && p.x <= bmd.width-2 && p.y ==2){
                targetPositions = [pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2, 
                                   pix-2, pix-1, pix, pix+1, pix+2,
                                   pix+bmd.width-2, pix+bmd.width-1, pix+bmd.width, pix+bmd.width+1, pix+bmd.width+2, 
                                   pix+bmd.width*2-2, pix+bmd.width*2-1, pix+bmd.width*2, pix+bmd.width*2+1, pix+bmd.width*2+2]
                
            }else if(p.x == bmd.width-1 && p.y ==2){
                targetPositions = [pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1, 
                                   pix-2, pix-1, pix, pix+1, pix+2,
                                   pix+bmd.width-2, pix+bmd.width-1, pix+bmd.width, pix+bmd.width+1,
                                   pix+bmd.width*2-2, pix+bmd.width*2-1, pix+bmd.width*2, pix+bmd.width*2+1]
            }else if(p.x == bmd.width && p.y ==2){
                targetPositions = [pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width,
                                   pix-2, pix-1, pix, pix+1, pix+2,
                                   pix+bmd.width-2, pix+bmd.width-1, pix+bmd.width,
                                   pix+bmd.width*2-2, pix+bmd.width*2-1, pix+bmd.width*2]
            }else if(p.x == 1 && p.y >=3 && p.y<=bmd.height-2){
                targetPositions = [pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix, pix+1, pix+2, 
                                   pix+bmd.width, pix+bmd.width+1, pix+bmd.width+2,
                                   pix+bmd.width*2, pix+bmd.width*2+1, pix+bmd.width*2+2]
                
            }else if(p.x == 2 && p.y >=3 && p.y<=bmd.height-2){
                targetPositions = [pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix-1, pix, pix+1, pix+2, 
                                   pix+bmd.width-1, pix+bmd.width, pix+bmd.width+1, pix+bmd.width+2,
                                   pix+bmd.width*2-1, pix+bmd.width*2, pix+bmd.width*2+1, pix+bmd.width*2+2]
            }else if(p.x == bmd.width-1 && p.y >=3 && p.y<=bmd.height-2){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1,
                                   pix-2,pix-1, pix, pix+1,
                                   pix+bmd.width-2,pix+bmd.width-1, pix+bmd.width, pix+bmd.width+1,
                                   pix+bmd.width*2-2, pix+bmd.width*2-1, pix+bmd.width*2, pix+bmd.width*2+1]
            }else if(p.x == bmd.width && p.y >=3 && p.y<=bmd.height-2){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width,
                                   pix-2,pix-1, pix,
                                   pix+bmd.width-2,pix+bmd.width-1, pix+bmd.width,
                                   pix+bmd.width*2-2, pix+bmd.width*2-1, pix+bmd.width*2]
            }else if(p.x == 1 && p.y == bmd.height -1){
                targetPositions = [pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix,pix+1, pix+2,
                                   pix+bmd.width,pix+bmd.width+1, pix+bmd.width+2]
            }else if(p.x == 1 && p.y == bmd.height){
                targetPositions = [pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix,pix+1, pix+2]
            }else if(p.x == 2 && p.y == bmd.height -1){
                targetPositions = [pix-bmd.width*2-1,pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width-1,pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix-1,pix,pix+1, pix+2,
                                   pix+bmd.width-1,pix+bmd.width,pix+bmd.width+1, pix+bmd.width+2]
            }else if(p.x == 2 && p.y == bmd.height){
                targetPositions = [pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix-1, pix, pix+1, pix+2]
            }else if(p.x == bmd.width-1 && p.y == bmd.height -1){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1,
                                   pix-2,pix-1,pix, pix+1,
                                   pix+bmd.width-2,pix+bmd.width-1, pix+bmd.width, pix+bmd.width+1]
            }else if(p.x == bmd.width && p.y == bmd.height -1){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width,
                                   pix-2,pix-1,pix,
                                   pix+bmd.width-2,pix+bmd.width-1, pix+bmd.width]
            }else if(p.x == bmd.width-1 && p.y == bmd.height){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1,
                                   pix-2,pix-1,pix, pix+1]
            }else if(p.x == bmd.width && p.y == bmd.height){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width,
                                   pix-2,pix-1,pix]
            }else if(p.x >=3 && p.x <= bmd.width-2 && p.y == bmd.height){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1,pix-bmd.width*2+2,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width,pix-bmd.width+1,pix-bmd.width+2,
                                   pix-2,pix-1,pix,pix+1,pix+2]
            }else if(p.x >=3 && p.x <= bmd.width-2 && p.y == bmd.height-1){
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1,pix-bmd.width*2+2,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width,pix-bmd.width+1,pix-bmd.width+2,
                                   pix-2,pix-1,pix,pix+1,pix+2,
                                   pix+bmd.width-2,pix+bmd.width-1, pix+bmd.width,pix+bmd.width+1,pix+bmd.width+2]
            }else{
                targetPositions = [pix-bmd.width*2-2, pix-bmd.width*2-1, pix-bmd.width*2, pix-bmd.width*2+1, pix-bmd.width*2+2,
                                   pix-bmd.width-2, pix-bmd.width-1, pix-bmd.width, pix-bmd.width+1, pix-bmd.width+2,
                                   pix-2,pix-1,pix,pix+1,pix+2,
                                   pix+bmd.width-2,pix+bmd.width-1, pix+bmd.width,
                                   pix+bmd.width*2-2,pix+bmd.width*2-1, pix+bmd.width*2,pix+bmd.width*2+1,pix+bmd.width*2+2]
                
            }
            
            
            
            return avgColorWithArray(targetPositions);
            
        }
        
        private function avgColorWithArray(target:Array):Array{
            var a:int =0;
            var r:int =0;
            var g:int =0;
            var b:int =0;
            for(var i:int=0; i< target.length; i++){
                var ar:Array = argb(pixels[target[i] -1])
                a += ar[0];
                r += ar[1];
                g += ar[2];
                b += ar[3];
            }
            return [Math.floor(a/target.length), Math.floor(r/target.length), Math.floor(g/target.length), Math.floor(b/target.length)]
        }
        
        
        private function positionXY(p:uint):Point{
            var x:uint = p % bmd.width;
            if(x == 0) x = bmd.width;
            var y:uint = Math.ceil(p / bmd.width);
            return new Point(x,y);
        }
        
        private function argb(hex:uint):Array{
            var alpha:int  = hex >> 24 & 0xFF;
            var red:int    = hex >> 16 & 0xFF;
            var green:int  = hex >>  8 & 0xFF;
            var blue:int   = hex & 0xFF;
            return [alpha, red, green, blue];
        }
        
        private function hex(argb:Array):int{
            var color:uint;
            //color |= argb[0] << 24;
            color |= argb[1] << 16;
            color |= argb[2] <<  8;
            color |= argb[3];
            return int("0x"+color.toString(16));
            
        }
        
    
    }


}