BitmapData pixelDissolve
♥0 |
Line 148 |
Modified 2010-10-03 00:38:29 |
MIT License
archived:2017-03-10 16:00:08
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;
}
}