topical media & game development
lib-flex-animation-code-05-ColorTracking.ax
lib-flex-animation-code-05-ColorTracking.ax
(swf
)
[ flash
]
flex
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.media.Camera;
import flash.media.Video;
public class @ax-lib-flex-animation-code-05-ColorTracking extends Sprite
{
private var _cam:Camera;
private var _vid:Video;
private var _bmpd:BitmapData;
private var _cbRect:Sprite;
private var _color:uint = 0xffffff;
private var _red:Array;
private var _green:Array;
private var _blue:Array;
private var _ball:Sprite;
public function @ax-lib-flex-animation-code-05-ColorTracking()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
_cam = Camera.getCamera();
_cam.setMode(320, 240, 15);
_vid = new Video(320, 240);
_vid.attachCamera(_cam);
_vid.filters = [new BlurFilter(10, 10, 1)];
_bmpd = new BitmapData(320, 240, false);
addChild(new Bitmap(_bmpd));
_cbRect = new Sprite();
addChild(_cbRect);
_ball = new Sprite();
_ball.graphics.beginFill(0x0000ff);
_ball.graphics.drawCircle(0, 0, 40);
_ball.graphics.endFill();
addChild(_ball);
makePaletteArrays();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.CLICK, onClick);
}
private function makePaletteArrays():void
{
_red = new Array();
_green = new Array();
_blue = new Array();
var levels:int = 4;
var div:int = 256 / levels;
for(var i:int = 0; i < 256; i++)
{
var value:Number = Math.floor(i / div ) * div;
_red[i] = value << 16;
_green[i] = value << 8;
_blue[i] = value
}
}
private function onClick(event:MouseEvent):void
{
_color = _bmpd.getPixel(mouseX, mouseY);
}
private function onEnterFrame(event:Event):void
{
_bmpd.draw(_vid, new Matrix(-1, 0, 0, 1, _bmpd.width, 0));
_bmpd.paletteMap(_bmpd, _bmpd.rect, new Point(), _red, _green, _blue);
var rect:Rectangle = _bmpd.getColorBoundsRect(0xffffff, _color, true);
_cbRect.graphics.clear();
_cbRect.graphics.lineStyle(1, 0xff0000);
_cbRect.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
if(!rect.isEmpty())
{
var xCenter:Number = rect.x + rect.width / 2;
var yCenter:Number = rect.y + rect.height / 2;
_ball.x = xCenter / _bmpd.width * stage.stageWidth;
_ball.y = yCenter / _bmpd.height * stage.stageHeight;
}
}
}
}
(C) Æliens
18/6/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.