Forked from: kinescript's mosaicSensor diff:1 forked from: mosaicSensor hugoMulder forked:0favorite:0lines:117license : All rights reserved modified : 2009-08-01 00:38:27 Embed Tweet // forked from kinescript's mosaicSensor /** IOモジュールにつなげた距離センサがセンシングした距離に応じて、 画像にモザイク処理がかかります。 画像見たいのに近づくと見えない!いらいら!!みたいな。 基本的なセットアップについては以下のURLを参照してください http://funnel.cc/Main/GettingStarted */ package { import caurina.transitions.Tweener; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.system.Security; import funnel.Convolution; import funnel.Gainer; import funnel.Scaler; import funnel.SignalScope; import funnel.gui.GainerGUI; [SWF(width="465", height="465", backgroundColor="0xFFFFFF", frameRate="60")] /** * モザイクフェードアウト→入替→モザイクフェードイン * の繰り返し。 */ public class fadeMosaic_var1 extends Sprite { private var Layer_a:Sprite = new Sprite(); private var Layer_b:Sprite = new Sprite(); private var mosaicMC:mosaicFader; private var W:Number = 465; private var H:Number = 465; //private var W:Number = 900; //private var H:Number = 450; private var mosCounter:uint = 0; private var imgLoader:Loader = new Loader(); private var urlReq:URLRequest; private var img:Sprite = new Sprite(); private var imgIndex:uint = 0; private var imgNum:uint = 5; private var gio:Gainer; private var gui:GainerGUI; private var scope:SignalScope; public function fadeMosaic_var1() { Security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml"); var context:LoaderContext = new LoaderContext(true); gio = new Gainer(Gainer.MODE1); /* gui = new GainerGUI(); addChild(gui); gio.gui = gui; scope = new SignalScope(5, 100, 200, "ain0", 1, 50); addChild(scope); */ var smoother:Convolution = new Convolution(Convolution.MOVING_AVERAGE); var scaler:Scaler = new Scaler(0.3, 0.65, 1, 50, Scaler.LINEAR, true); gio.analogInput(0).filters = [smoother, scaler]; addChildAt(Layer_a,0); addChildAt(Layer_b,1); Layer_a.addChild(img); mosaicMC = new mosaicFader(W, H); Layer_b.addChild( mosaicMC ); mosaicMC.x = W / 2; mosaicMC.y = H / 2; mosaicMC.setMosaic(Layer_a); urlReq = new URLRequest("http://farm3.static.flickr.com/2589/3715579628_7199592057.jpg?v=0"); imgLoader.load(urlReq, context); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void{ img.addChild(imgLoader); resize(img); addEventListener(Event.ENTER_FRAME, loop); }); } private function loop(e:Event):void{ if(gio.analogInput(0).value != 0){ mosaicMC.scaleNum = gio.analogInput(0).value; } if(mosaicMC != null){ mosaicMC.setMosaic(Layer_a); } scope.update(gio.analogInput(0)); } private function resize(buf:Sprite):void{ buf.width = buf.getChildAt(0).width; buf.height = buf.getChildAt(0).height; if(buf.width > W || buf.height > H){ if(buf.width > buf.height){ buf.scaleX = W/buf.width; buf.scaleY = W/buf.width; }else{ buf.scaleX = H/buf.height; buf.scaleY = H/buf.height; } } buf.x = W/2 - buf.width/2; buf.y = H/2 - buf.height/2; } } } import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.geom.Matrix; import caurina.transitions.Tweener; import flash.events.Event; class mosaicFader extends Sprite { private var bmp:Bitmap; private var bmpData:BitmapData; private var Mtx:Matrix; private var W:Number, H:Number; public var scaleNum:uint = 1; //モザイクの拡大率 public function mosaicFader(pw:Number, ph:Number) { W = pw; H = ph; bmpData = new BitmapData(1,1); bmp = new Bitmap(bmpData); addChild(bmp); bmp.x = -W / 2; bmp.y = -H / 2; } public function setMosaic(mc:Sprite):void { Mtx = new Matrix(); Mtx.scale( 1/scaleNum, 1/scaleNum ); bmpData = new BitmapData( W/scaleNum, H/scaleNum, false, 0xFFFFFF ); bmpData.draw( mc, Mtx ); bmp.bitmapData = bmpData; bmp.scaleX = W/bmpData.width; bmp.scaleY = H/bmpData.height; } } Code Fullscreen Preview Fullscreen