エフェクト AfterImageSliceを作ってみた。

ActionScript3で、Webカメラの映像にエフェクトをかけてみた。
僕が知らないだけかもしれないが、同じようなエフェクトが無いようなのでAfterImageSliceと名付けた。

ソースは以下。
10フレーム前までの映像をコピーしておいて、一列ごとに最新〜10フレーム前までのいずれかの映像をあてはめる。

package
{
    import flash.display.*;
    import flash.events.*;
    import flash.media.*;
    import flash.filters.*;
    import flash.geom.*;

    public class Slice extends Sprite {
	private var bd:BitmapData;
	private var bdCopyArray:Array;
	private var video:Video;
	private var bitmap:Bitmap;
        private var count:int
        private var sliceArray:Array

	public function Slice(){
	    bd = new BitmapData(640, 480, false, 0x00000000);

            bdCopyArray = new Array();
            sliceArray = new Array();
            for(var i:int = 0; i < 480; i++){
	        bdCopyArray.push(new BitmapData(640, 480, false, 0x00000000));
                sliceArray.push(Math.floor(Math.random() * 10));
            }

	    bitmap = new Bitmap(bd);
	    addChild(bitmap);
	    addEventListener(Event.ENTER_FRAME, onEnterFrame);

	    var camera:Camera = Camera.getCamera();


	    if(camera != null){
		camera.setMode(640, 480, 15);
		camera.setMotionLevel(10);
		camera.setQuality(0, 10);

		video = new Video(640, 480);
		video.attachCamera(camera);
	    }
	}
        public function onEnterFrame(evt:Event):void {
            count++;
	    bd.draw(video);

            bdCopyArray[count%10] = bd.clone();
            for(var i:int = 0; i < 480; i++){
                bd.copyPixels(bdCopyArray[sliceArray[i]],new Rectangle(0,i,640,1),new Point(0,i));
            }
        }
    }
}