Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0" encoding="utf-8"?>
- <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
- <mx:Script>
- <![CDATA[
- import mx.controls.Alert;
- // public var xBitmap:Bitmap;
- private var bitmapData:BitmapData;
- private var searchColorA:uint = 0xFFFFFF;
- private var searchColorB:uint = 0x000000;
- private function init():void {
- var camera:Camera = Camera.getCamera();
- camera.setMode( 640, 480, 25, false );
- if (camera) {
- video.attachCamera(camera);
- } else {
- Alert.show("You don't seem to have a camera.");
- }
- this.addEventListener(Event.ENTER_FRAME, handleActivity );
- // camera.addEventListener(ActivityEvent.ACTIVITY, handleActivity );
- var g:Graphics = red.graphics;
- g.lineStyle(1, 0xFF0000, 0.75 );
- g.beginFill(0xFF0000, 0.75 );
- g.drawCircle(0, 0, 10);
- g.endFill();
- g = green.graphics;
- g.lineStyle(1, 0x00FF00, 0.75);
- g.beginFill(0x00FF00, 0.75);
- g.drawCircle(0, 0, 10);
- g.endFill();
- }
- private function askPermission( ) : void {
- // Security.showSettings( SecurityPanel.PRIVACY );
- }
- private function handleActivity( event:Event ) : void {
- if (bitmapData == null) {
- bitmapData = new BitmapData( video.width, video.height );
- // bData.draw( video );
- // xBitmap = new Bitmap( bData );
- // target.source = xBitmap;
- }
- bitmapData.draw( video );
- // now that we have some nice data in the bitmapData property, let's proceed
- var matchedA_x:Array = new Array();
- var matchedA_y:Array = new Array();
- var matchedB_x:Array = new Array();
- var matchedB_y:Array = new Array();
- for (var y:int = 0; y < bitmapData.height; y++) {
- for (var x:int = 0; x < bitmapData.width; x++) {
- if (match(searchColorA, bitmapData.getPixel(x, y) )) {
- matchedA_x.push( x );
- matchedA_y.push( y);
- } else if (match( searchColorB, bitmapData.getPixel( x, y ))) {
- matchedB_x.push( x );
- matchedB_y.push( y );
- }
- }
- }
- var a_avg_x:int = 0;
- var a_avg_y:int = 0;
- var b_avg_x:int = 0;
- var b_avg_y:int = 0;
- var i:int;
- if (matchedA_x.length > 0) {
- for (i = 0; i < matchedA_x.length; i++ ) {
- a_avg_x = a_avg_x + matchedA_x[i];
- a_avg_y = a_avg_y + matchedA_y[i];
- }
- a_avg_x = a_avg_x / matchedA_x.length;
- a_avg_y = a_avg_y / matchedA_y.length;
- }
- if (matchedB_x.length > 0) {
- for (i = 0; i < matchedB_x.length; i++) {
- b_avg_x = b_avg_x + matchedB_x[i];
- b_avg_y = b_avg_y + matchedB_y[i];
- }
- b_avg_x = b_avg_x / matchedB_x.length;
- b_avg_y = b_avg_y / matchedB_x.length;
- }
- // move the canvases
- red.x = a_avg_x;
- red.y = a_avg_y;
- green.x = b_avg_x;
- green.y = b_avg_y;
- }
- private function setColor( event:MouseEvent ) : void {
- var x:int = event.localX;
- var y:int = event.localY;
- searchColorA = bitmapData.getPixel( x, y );
- }
- private function setOtherColor( event:MouseEvent ) : void {
- var x:int = event.localX;
- var y:int = event.localY;
- searchColorB = bitmapData.getPixel( x, y );
- }
- private function match( colorA:uint, colorB:uint ) : Boolean {
- var limit:int = 20;
- var sr:int = colorA >> 16 & 0xFF;
- var sg:int = colorA >> 8 & 0xFF;
- var sb:int = colorA & 0xFF;
- var cr:int = colorB >> 16 & 0xFF;
- var cg:int = colorB >> 8 & 0xFF;
- var cb:int = colorB & 0xFF;
- return cr > sr - limit && cr < sr + limit && cg > sg - limit && cg < sg + limit && cb > sb - limit && cb < sb + limit;
- }
- ]]>
- </mx:Script>
- <mx:Canvas>
- <mx:VideoDisplay id="video" height="480" width="640" creationComplete="askPermission()" rightClick="setOtherColor( event )" click="setColor( event )"/>
- <!-- <mx:Image id="target" height="640" width="480"/> -->
- <mx:Canvas id="red"/>
- <mx:Canvas id="green"/>
- </mx:Canvas>
- <mx:Button id="button"
- label="Attach Camera"
- click="init();" />
- </mx:WindowedApplication>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement