MotionTracking

by fakestar0826 forked from ColorTracking (diff: 64)
♥0 | Line 67 | Modified 2011-01-24 00:50:02 | MIT License
play

ActionScript3 source code

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

// forked from fakestar0826's ColorTracking
package {
    import flash.display.BlendMode;
    import flash.filters.BlurFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.geom.Matrix;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.media.Video;
    import flash.media.Camera;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        private var _cam:Camera;
        private var _vid:Video;
        private var _newFrame:BitmapData;
        private var _oldFrame:BitmapData;
        private var _blendFrame:BitmapData;
        private var _cbRect:Sprite;
        private var _paddle:Sprite;
        
        public function FlashTest() {
            // write as3 code here..
            _cam = Camera.getCamera();
            _cam.setMode(320, 240, 15);
            _vid = new Video(320, 240);
            _vid.attachCamera(_cam);
            _vid.filters = [new BlurFilter(10, 10, 1)];
            
            _cbRect = new Sprite();
            addChild(_cbRect);
            
            _paddle = new Sprite();
            _paddle.graphics.beginFill(0xFF0000);
            _paddle.graphics.drawRect(-100, -20, 200, 40);
            _paddle.graphics.endFill();
            _paddle.x = stage.stageWidth / 2;
            _paddle.y = stage.stageHeight - 50;
            addChild(_paddle);
            
            _newFrame = new BitmapData(320, 240, false);
            _oldFrame = _newFrame.clone();
            _blendFrame = _newFrame.clone();
            addChild(new Bitmap(_blendFrame));
            
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        private function onEnterFrame(e:Event):void
        {
            _blendFrame.draw(_oldFrame);
            _newFrame.draw(_vid, new Matrix(-1, 0, 0, 1, _newFrame.width, 0));
            _oldFrame.draw(_newFrame);
            _blendFrame.draw(_newFrame, null, null, BlendMode.DIFFERENCE);
            _blendFrame.threshold(_blendFrame, _blendFrame.rect, new Point(), "<", 0x00330000, 0xFF000000, 0x00FF0000, true);
            
            var rect:Rectangle = _blendFrame.getColorBoundsRect(0xFFFFFF, 0x000000, false);
            _cbRect.graphics.clear();
            _cbRect.graphics.lineStyle(1, 0xFF0000);
            _cbRect.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
            
            if(!rect.isEmpty())
            {
                if(rect.x < _blendFrame.width / 2)
                {
                    _paddle.x -= -2;
                }
                else
                {
                    _paddle.x += 2;
                }

            }

        }


    }
}

Forked