flash on 2011-11-18

by NullBaySea
use a container to contain a camera video
if press capture. the video replaced by the bitmapdata. 
!!!!!! the bitmap image is SMALLER (USING THE MATRIX OBJECT)
if press reset the camera video back again
fullscreen
♥1 | Line 79 | Modified 2011-11-18 01:53:28 | MIT License
play

ActionScript3 source code

/**
 * Copyright NullBaySea ( http://wonderfl.net/user/NullBaySea )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5Sk9
 */

// use a container to contain a camera video
// if press capture. the video replaced by the bitmapdata. 
// !!!!!! the bitmap image is SMALLER (USING THE MATRIX OBJECT)
// if press reset the camera video back again

package {
    import flash.display.MovieClip;
    import flash.media.Camera;
    import flash.media.Video;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.geom.Matrix;
    import flash.geom.Point;
    // fullscreen
    import flash.display.Stage
    import flash.display.StageDisplayState

    public class Main extends MovieClip {
        // data for the camera
        private var CameraObj:Camera;
        private var VideoObj:Video;
        private var VidW:int = 640;
        private var VidH:int = 480;
        // data for the bitmapdata
        private var BitmapDataStage:BitmapData;
        private var BitmapStage:Bitmap;
        private var BitW:int = 1024;
        private var BitH:int = 768;
        private var ScaleRatio:Number = .05;
        private var tx:int = Math.floor(VidW * ScaleRatio);
        private var ty:int = Math.floor(VidH * ScaleRatio);
        private var k:int = 0;
        private var row:int = 32;
        private var total:int = row*32;
        // for the bitmap size transformation
        private var MatrixTransform:Matrix;
        // a bitmap array to store 100 image
        private var BitmapDataArray :Array = new Array();
        //
        public function Main() {
            if (stage != null) {
                init();
            } else {
                addEventListener(Event.ADDED_TO_STAGE , on_ADDED_TO_STAGE);
                addEventListener(Event.REMOVED_FROM_STAGE , on_REMOVED_FROM_STAGE );
            }
        }
        public function on_ADDED_TO_STAGE(e:Event):void {
            init();
        }
        public function init():void {
            // fullscreen
            stage.displayState = StageDisplayState.FULL_SCREEN;
            // Camera Object
            CameraObj = Camera.getCamera();
            CameraObj.setMode(VidW,VidH,30,true);
            // Video Object that holds the Camera Object;
            VideoObj = new Video(CameraObj.width,CameraObj.height);
            VideoObj.attachCamera(CameraObj);
            // BITMAP on stage
            BitmapDataStage = new BitmapData(BitW,BitH,false,0x000000);
            BitmapStage = new Bitmap(BitmapDataStage);
            // BITMAPDATA sssss to store time
            for (var i:int = 0; i<total; i++) {
                var BMPD:BitmapData = new BitmapData(tx,ty,false,0x000000);
                BitmapDataArray.push(BMPD);
            }
            //;
            addChild(BitmapStage);
            //
            addEventListener(Event.ENTER_FRAME , on_ENTER_FRAME,  false , 0 ,true);
        }
        public function on_ENTER_FRAME(e:Event):void {
            // shift 1-99 to 0-98
            for (var i:int = 0; i<total-1; i++) {
                BitmapDataArray[i] = BitmapDataArray[i + 1];
            }
            // change 99th bitmapdata
            var BMPD:BitmapData = new BitmapData(tx,ty,false,0x000000);
            MatrixTransform = new Matrix();
            MatrixTransform.scale(ScaleRatio,ScaleRatio);
            BMPD.draw(VideoObj,MatrixTransform);
            BitmapDataArray[total - 1] = BMPD;
            //
            // scale the image first 
            for (var k:int = 0; k<total; k++) {
                var BMP_cache:BitmapData = BitmapDataArray[k] as BitmapData;
                BitmapDataStage.copyPixels(BMP_cache,BMP_cache.rect,new Point(tx*(k%row) , ty *(k-k%row)/row) ,null,null,false);
            }
            //;
            k++;
            if (k == total) {
                k = 0;
            }
        }
        public function on_REMOVED_FROM_STAGE(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE , on_ADDED_TO_STAGE);
            removeEventListener(Event.REMOVED_FROM_STAGE , on_REMOVED_FROM_STAGE );
        }
    }
}