ActionScript3でモザイクイン
AS3でモザイクインを実装してみた。
と言っても、AS2のソースをAS3で書き直してみただけです。。
見た目はこんな感じ。
SWFをそのまま表示させたい・・
この4段階の画像を作るの苦労したなぁwww
はい!チョッパ〜♪
以下、スクリプト。
Root.as
package { import flash.display.Sprite; import flash.display.StageAlign; public class Root extends Sprite { public function Root():void { stage.scaleMode = "noScale"; stage.align = StageAlign.TOP_LEFT; addChild(new SampleImage()); } } }
SampleImage.as
package { import flash.display.Sprite; import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; public class SampleImage extends Sprite { public function SampleImage():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.load(new URLRequest("photo.jpg")); addChild(loader); } private function completeHandler(e:Event):void { this.parent.addChild(new Mozaic(this)); } } }
Mozaic.as
package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Matrix; import flash.events.Event; public class Mozaic extends Sprite { private static const SMALL_TO:Number = 0.9; private var mozaicSize:Number = 100; private var _target:Sprite; public function Mozaic(target:Sprite):void { _target = target; addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function enterFrameHandler(e:Event):void { var mtx:Matrix = new Matrix(); mtx.scale(1 / mozaicSize, 1 / mozaicSize); var bmpData:BitmapData = new BitmapData(Math.floor(_target.width / mozaicSize), Math.floor(_target.height / mozaicSize), false); var bmp:Bitmap = new Bitmap(bmpData); addChild(bmp); bmpData.draw(_target, mtx); width = _target.width; height = _target.height; if (mozaicSize == 1){ removeEventListener(Event.ENTER_FRAME, enterFrameHandler); this.parent.removeChild(this); }else{ mozaicSize *= SMALL_TO; if (mozaicSize <= 1) { mozaicSize = 1; } } } } }
AS2との大きな違いはMozaicクラスの下記の箇所のみ。
var bmpData:BitmapData = new BitmapData(Math.floor(_target.width / mozaicSize), Math.floor(_target.height / mozaicSize), false); var bmp:Bitmap = new Bitmap(bmpData); addChild(bmp);
AS2では作成したBitmapDataインスタンスをMovieClipにattachBitmapで終わりだけど、
AS3だとBitmapのインスタンス作成が必要になります。