pixelizate practice2

by k2syndrome_g forked from pixelizate practice1 (diff: 15)
♥0 | Line 97 | Modified 2011-02-21 18:21:46 | MIT License
play

ActionScript3 source code

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

// forked from k2syndrome_g's pixelizate practice1
// forked from k2syndrome_g's Loader1+filter1 practice
package {
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.filters.ConvolutionFilter;
    import flash.geom.Matrix;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.net.URLRequest;
    import flash.display.Loader;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // write as3 code here..
            var loader:Loader=new Loader();
            loader.contentLoaderInfo.addEventListener(Event.INIT,init);
            loader.load(new URLRequest("http://blog-imgs-21-origin.fc2.com/v/i/p/vipvipblogblog/org12761.jpg"));
        }
        private function init(event:Event):void{
            var loader2:Loader=new Loader();
            loader2.contentLoaderInfo.addEventListener(Event.INIT,init2);
            loader2.loadBytes(event.currentTarget.bytes);
        }
        private function init2(event:Event):void{
            var loader:Loader=event.currentTarget.loader;
            var bitmapdata:BitmapData=new BitmapData(loader.width,loader.height,true,0x0);
            bitmapdata.draw(loader);
            bitmapdata=pixelizate2(bitmapdata,30);
            var bitmap:Bitmap=new Bitmap(bitmapdata);
            bitmap.scaleX=bitmap.scaleY=0.3;
            bitmap.x=-100;
            addChild(bitmap);
        }
        private function pixelizate(bd:BitmapData,size:int=10):BitmapData{
            var dest:BitmapData=bd.clone();
            var color:ARGB=new ARGB();
            var count:int;
            var r:int;
            var g:int;
            var b:int;
            for(var y:int=0;y<bd.height;y+=size){
                for(var x:int=0;x<bd.width;x+=size){
                    count=0;
                    r=0;
                    g=0;
                    b=0;
                    for(var yy:int=0;yy<size;yy+=1){
                        for(var xx:int=0;xx<size;xx+=1){
                            if(x+xx<0||x+xx>=bd.width||y+yy<0||y+yy>=bd.height)continue;
                            color.setARGB(bd.getPixel(x+xx,y+yy));
                            r+=color.r;
                            g+=color.g;
                            b+=color.b;
                            count++;
                        }
                    }
                    color.r=r/count;
                    color.g=g/count;
                    color.b=b/count;
                    for(yy=0;yy<size;yy+=1){
                        for(xx=0;xx<size;xx+=1){
                            if(x+xx<0||x+xx>=bd.width||y+yy<0||y+yy>=bd.height)continue;
                            dest.setPixel(x+xx,y+yy,color.getARGB());
                        }
                    }
                }
            }
            return dest;
        }
        private function pixelizate2(bd:BitmapData,size:int):BitmapData{
            var dest:BitmapData=pixelizate(bd,size);
            var pattern:BitmapData=new BitmapData(size,size,true,0x0);
            pattern.fillRect(new Rectangle(size/3,size-1,size,1),0xFF000000);
            pattern.fillRect(new Rectangle(size-1,size/3,1,size),0xFF000000);
            var canvas:Sprite=new Sprite();
            canvas.graphics.beginBitmapFill(pattern);
            canvas.graphics.drawRect(0,0,bd.width,bd.height);
            canvas.graphics.endFill();
            dest.draw(canvas);
            return dest;
        }
    }
}
class ARGB{
    public var a:int=0;
    public var r:int=0;
    public var g:int=0;
    public var b:int=0;
    public function setARGB(pixel:uint):void{
        this.a=pixel>>24&0xFF;
        this.r=pixel>>16&0xFF;
        this.g=pixel>>8&0xFF;
        this.b=pixel&0xFF;
    }
    public function getARGB():uint{
        return this.a<<24|this.r<<16|this.g<<8|this.b;
    }
}