BitmapData pixelDissolve

by hacker_szoe51ih
♥0 | Line 148 | Modified 2010-10-03 00:38:29 | MIT License
play

ActionScript3 source code

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

package {
    import adobe.utils.CustomActions;
    import flash.display.*;
    import flash.events.*;
    import flash.filters.DisplacementMapFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.net.*;
    import flash.system.*;

    [SWF(width=465,height=465,backgroundColor=0xffffff,frameRate=45)]
    public class Main extends Sprite {
        
        public var photoBoxSp:Sprite;
        public var photoBM:Bitmap;
        public var lo:Loader;
        public var urlReq:URLRequest;
        public var pass0:String = "http://farm5.static.flickr.com/4146/5017161033_2a85566fde.jpg";
        public var pass1:String = "http://farm5.static.flickr.com/4087/5017767668_301dcd4985.jpg";
        public var pass2:String = "http://farm5.static.flickr.com/4090/5017767720_1f04f48074.jpg";
        public var passArray:Array;
        public var bmdArray:Array;
        public var photoArray:Array;
        public var photoNum:Number = 3;
        public var currentNum:Number = 0;
        public var dissolveRandomNum:Number = 0;
        public var dissolvingPixels:Number = 2000;//一回にディゾルブするピクセル数
        public var dissolvedPixels:Number = 0;//ディゾルブしたピクセル数の累計
        public var photoTotalPixels:Number = 400 * 300;
        public var W:Number = stage.stageWidth;
        public var H:Number = stage.stageHeight;
        public var button:MyButton;

        public function Main() {
            init();
        }
        
        public function init():void {
            button = new MyButton();  
            button.x = 215; 
            button.y = 400;  
            addChild(button);    
            
            passArray = new Array();
            photoArray = new Array();
            bmdArray = new Array();
            passArray = [pass0, pass1, pass2];
            for (var i:int = 0; i < photoNum;i++ ) {
                urlReq = new URLRequest(passArray[i]);
                lo = new Loader();
                lo.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                photoArray.push(lo);
                var myLoaderContext:LoaderContext = new LoaderContext(true);
                lo.load(urlReq,myLoaderContext);                
            }
        }
        
        public function onComplete(e:Event):void {
            bmdArray.push(e.target.content);//回数を図る為
            if (bmdArray.length==photoNum) {
                init2();
            }
        }
        
        public function init2():void {
            bmdArray = null;//回数を図り終えたので破棄
            bmdArray = new Array();
            for (var i:int = 0; i < photoNum; i++ ) {
                var bmd:BitmapData = new BitmapData(400, 300);
                bmd.draw(photoArray[i]);
                bmdArray.push(bmd);
            }
            photoBM = new Bitmap(bmdArray[currentNum]);
            photoBoxSp = new Sprite();
            photoBoxSp.addChild(photoBM);
            addChild(photoBoxSp);
            photoBM.x = W / 2 - photoBM.width / 2;
            photoBM.y = H / 2 - photoBM.height / 2;    
            button.addEventListener(MouseEvent.CLICK,onClick);
        }
        
        
        public function disolveFunc():BitmapData {
            var bmd:BitmapData = new BitmapData(400, 300);
            bmd = photoBM.bitmapData.clone();
            var souceBitMap:BitmapData = new BitmapData(400,300);
            souceBitMap = bmdArray[currentNum];
            var souceRect:Rectangle = new Rectangle();
            souceRect = bmdArray[currentNum].rect;
            var destPoint:Point = new Point(0, 0);
            var randomSeed:int = dissolveRandomNum;
            var numPixels:int = dissolvingPixels;
            var fillCol:uint = 0;
            bmd.pixelDissolve(souceBitMap, souceRect, destPoint, randomSeed, numPixels, fillCol);
            dissolveRandomNum=bmd.pixelDissolve(souceBitMap, souceRect, destPoint, randomSeed, numPixels, fillCol);
            return bmd;
        }
        
        public function onClick(e:MouseEvent):void {
            dissolveRandomNum = Math.ceil(Math.random()*int.MAX_VALUE);
            if (currentNum<photoNum-1) {
                currentNum += 1;
            }else if(currentNum==photoNum-1){
                currentNum = 0;
            }
            button.removeEventListener(MouseEvent.CLICK,onClick);
                stage.addEventListener(Event.ENTER_FRAME,onEnterFramer);
            trace(currentNum);
        }
        
        
        public function onEnterFramer(e:Event):void {
            dissolvedPixels += dissolvingPixels;
            if (dissolvedPixels <= photoTotalPixels) {
                photoBM.bitmapData=disolveFunc();
            }else if (dissolvedPixels > photoTotalPixels) {
                dissolvedPixels = 0;    
                stage.removeEventListener(Event.ENTER_FRAME, onEnterFramer);
                button.addEventListener(MouseEvent.CLICK,onClick);
            }
            
        }
        
        

    }


}


    import flash.display.*;
    import flash.events.*;
    import flash.text.TextField;
    import flash.text.TextFormat;

     class MyButton extends Sprite {
        
        public var box:Sprite;
        public var textField:TextField;
        public var textFormat:TextFormat;
        public var textSprite:Sprite;

        public function MyButton() {
            init();
        }
        
        public function init():void {
            textSprite = new Sprite();
            textField = new TextField();
            textFormat = new TextFormat();
            textFormat.font = "MS ゴシック";
            textFormat.size = 14;
            textFormat.color = 0x666666;
            textFormat.letterSpacing = 1;
            textField.defaultTextFormat = textFormat;
            textField.text = "click";
            box = new Sprite();
            box.graphics.beginFill(0xcccccc);
            box.graphics.drawRoundRect(0, 0, 45, 21,3,3);
            box.graphics.endFill();
            box.buttonMode = true;
            box.mouseEnabled;
            box.mouseChildren = false;
            addChild(box);
            box.x = 0;
            box.y = 0;
            box.addChild(textField);
            textField.x = 2;
            textField.y = 2;
        }
        
        
        
    }