dejo el codigo del metodo que detecta el color, por si alguie depronto me puedes colaborar detectando donde estoy modificando mal el codigo debido a que no se muestra la animacion cuando lo ejecuto.
Código ActionScript :
package playground.src.video{ import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.geom.Point; import flash.media.Camera; import flash.media.Video; import flash.system.Capabilities; import flash.system.System; import flash.utils.Timer; import flash.net.URLRequest; import flash.net.URLLoader; import flash.display.*; import playground.src.loop.Loop; public class ColorTracker extends Sprite { private var _trackedcolor:uint; private var _treshold:uint; private var _circle:Sprite; //variables agregadas private var _urlloader:URLRequest; private var _myLoader:Loader; // private var _tick:Timer; private var _pos:Point; private var _bmd:BitmapData; private var _bmp:Bitmap; private var _cam:Camera; private var _width:int; private var _height:int; private var _yposarray:Array; private var _xposarray:Array; private var _vid:Video; private var _loop:Loop; private var _avgpos:Point; public var publicpos:Point; public var showcircle:Boolean; public function ColorTracker(width:int ,height:int, colorToTrack:uint, treshold:uint){ _width=width; _height=height; _trackedcolor=colorToTrack; _treshold=treshold; init(); } private function init():void { publicpos=new Point(0,0); _avgpos=new Point(0,0); _pos=new Point(0,0); var index:int=0; for (var i : int = 0; i < Camera.names.length; i++) { if (Camera.names[i]=="USB Video Class Video") { index=i; } } _cam=Camera.getCamera(String(index)); _cam.setMode(_width, _height, 30); _vid=new Video(_width,_height); _vid.attachCamera(_cam); _vid.smoothing=true; _bmd=new BitmapData(_width,_height); _bmp=new Bitmap(_bmd); addChild(_bmp); _loop = new Loop(); _loop.addTask(render, "renderID"); addChild(_loop); drawCircle(); _tick=new Timer(1000); _tick.addEventListener(TimerEvent.TIMER, average); _tick.start(); _xposarray = new Array(); addEventListener(MouseEvent.CLICK, onClick); //evento objeto _myLoader _myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); } private function moveCircle():void { } public function average(e:TimerEvent):Point { _avgpos=_pos; trace(_avgpos); return _avgpos; } private function onClick(e:MouseEvent):void { getColorFromMousePos(); } private function getColorFromMousePos():void { _trackedcolor=_bmd.getPixel(stage.mouseX,stage.mouseY); removeChild(_circle); //Lineas agregadas _myLoader.unload(); // drawCircle(); } private function render():void { _circle.x += (_avgpos.x - _circle.x)/10; _circle.y += (_avgpos.y - _circle.y)/10; trackColor(); _bmd.draw(_vid); } private function drawCircle():void { _circle = new Sprite(); //Lineas suprimidas //_circle.graphics.beginFill(_trackedcolor, 1); //_circle.graphics.drawCircle(0, 0, 12); //_circle.graphics.endFill(); //Lineas agregadas loadSWF(); } //Lineas agregadas private function loadSWF():void { _myLoader = new Loader(); _urlloader=new URLRequest("ExternalSWF.swf"); _myLoader.load(_urlloader); trace("loadSWF"); } function loadComplete(event:Event):void { _circle.addChild(_myLoader); addChild(_circle); trace("COMPLETADO"); } // public function trackColor():Point { for (var i = 0; i < 320; i++) { for (var j = 0; j < 240; j++) { if (_bmd.getPixel(i,j)< =_trackedcolor+3200&&_bmd.getPixel(i,j) >=_trackedcolor-3200) { _pos.x=i; _pos.y=j; publicpos=_pos; } } } return _pos; } } }