timedisplacement
先日のちょっと前のフレームを表示を利用して、フレームを1ラインずつ描画してみました。
timedisplacementって言うらしいです。
Webカメラで遊ぶと面白いです。
参考にしたページはこちらです。
http://saqoosha.net/lab/timedisplacement/?http://www.youtube.com/watch?v=I2MsDogV4g4
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" viewSourceURL="srcview/index.html"> <mx:Script> <![CDATA[ import mx.controls.Image; import mx.controls.VideoDisplay; private var size:int = 200; private var bd:BitmapData = new BitmapData( size , size ); //初期化関数 private function init():void{ //タイマー作成 this.addEventListener(Event.ENTER_FRAME , myTimer ); } //タイマー private function myTimer( e:Event ):void{ //とりあえずビデオを毎回bdへ描画 bd.draw(myFlv); //バッファの作成と描画 myDraw(); } //バッファの作成と描画関数 private var frame:int = 0; private var bd_buf:Array = new Array(); private var bd_tmp:BitmapData = new BitmapData( size , size ); private var bd_dest:BitmapData = new BitmapData( size , size ); private function myDraw():void{ //画像のクローン作成 bd_tmp = bd.clone(); //配列に現在の画像を追加 bd_buf[frame] = bd_tmp; //バッファたまった? if( frame > size ){ for( var i:int = 0 ; i < size ; i++ ){ //バッファから一ラインずつずらしながらbitmapへ描画 bd_dest.copyPixels( bd_buf[frame - i ] , new Rectangle( 0, i , size , 1 ) , new Point( 0 , i ) ); } myImage.source = new Bitmap( bd_dest ); //古いバッファを削除 bd_buf[frame-size] = null; } frame++; } ]]> </mx:Script> <mx:Image x="10" y="10" width="200" height="200" id="myImage"/> <mx:VideoDisplay x="218" y="10" width="200" height="200" id="myFlv" source="test.flv"/> </mx:Application>
次は背景を認識して、エセ旅行写真とかやってみたいなぁ。