/* * GuidesTest.as - Live Color Pointer Detection Example * Copyright (c) 2009 Yusuke Kawasaki http://www.kawa.net/ * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * */ package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.KeyboardEvent; import flash.net.URLRequest; import flash.ui.Keyboard; import org.libspark.LivePointers.LP_Detector; import org.libspark.LivePointers.LP_Guide; public class GuidesTest extends Sprite { private var lpdetector:LP_Detector; static private var captureFPS:int = 30; static private var captureX:int = 320; static private var captureY:int = 240; static private var displayX:int = 640; static private var displayY:int = 480; static private var workX:int = 80; static private var workY:int = 60; static private var filePrefix:String = 'images/test/test ('; static private var fileSuffix:String = ').jpg'; private var images:Array; private var loadno:int = 1; private var showno:int = 0; private var spImage:Sprite; static private var guidesH:Object = { pinkball: 0xD37290, greenball: 0x24C882, orangeball: 0xCA9164, blueball: 0x1A71BA, fingercap: 0x2497AC }; public function GuidesTest ():void { // Image Layer spImage = new Sprite(); this.addChild(spImage); images = new Array(); this.loadNextImage(); // Live Pointer lpdetector = new LP_Detector(workX,workY); var spPointer:Sprite = lpdetector.getPreview(displayX, displayY); this.addChild(spPointer); lpdetector.allowS = 0.3; // Pointer Guides for ( var name:String in guidesH ) { var rgb:uint = guidesH[name]; var gi:LP_Guide = new LP_Guide( name ); gi.fromRGB( rgb ); gi.max = 2; lpdetector.addGuide(gi); } // run stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown ); } private function onKeyDown (e:KeyboardEvent):void { if ( e.keyCode == Keyboard.RIGHT ) { this.showImage( showno+1 ); } else if ( e.keyCode == Keyboard.LEFT ) { this.showImage( showno-1 ); } } private function showImage (index:int = 0):void { if ( index < 0 ) return; if ( index > images.length-1 ) return; showno = index; var image:Loader = images[showno]; if ( ! image ) return; var sprite:Sprite = new Sprite(); sprite.addChild( image ); sprite.scaleX = 1.0 * displayX / image.width; sprite.scaleY = 1.0 * displayY / image.height; while ( spImage.numChildren > 0 ) { spImage.removeChildAt( spImage.numChildren-1 ); } spImage.addChild( sprite ); this.addEventListener( Event.ENTER_FRAME, onNextFrame ); } private function onNextFrame (e:Event):void { this.removeEventListener( Event.ENTER_FRAME, onNextFrame ); var image:Loader = images[showno]; if ( ! image ) return; var bmdImage:BitmapData = new BitmapData( image.width, image.height ); bmdImage.draw(image); lpdetector.setFrame(bmdImage); lpdetector.findClusters(); } private function loadNextImage ():void { var file:String = filePrefix + loadno + fileSuffix; var req:URLRequest = new URLRequest(file); var loader:Loader = new Loader(); images.push( loader ); loader.load(req); var info:LoaderInfo = loader.contentLoaderInfo; info.addEventListener(Event.COMPLETE, this.onComplete); info.addEventListener(IOErrorEvent.IO_ERROR, this.onAllComplete); loadno ++; } private function onComplete (e:Event):void { var loader:Loader = images[images.length - 1]; var info:LoaderInfo = loader.contentLoaderInfo; info.removeEventListener(Event.COMPLETE, this.onComplete); info.removeEventListener(IOErrorEvent.IO_ERROR, this.onAllComplete); this.loadNextImage(); } private function onAllComplete (e:IOErrorEvent):void { var loader:Loader = images.pop(); var info:LoaderInfo = loader.contentLoaderInfo; info.removeEventListener(Event.COMPLETE, this.onComplete); info.removeEventListener(IOErrorEvent.IO_ERROR, this.onAllComplete); this.showImage(0); } } }