package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display.*; import flash.events.*; import flash.media.Camera; import flash.media.Video; import flash.utils.*; import flash.net.*; //import mx.collections.ArrayCollection; public class CameraAMFPHP extends Sprite { private var video:Video; private var gatewayURL:String = "http://richard-c.com/dev/amfphp/gateway.php"; private var myService:NetConnection; public var images:Array; public function CameraAMFPHP() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var camera:Camera = Camera.getCamera(); if (camera != null) { //camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler); video = new Video(camera.width, camera.height); addChild(video); positionVideo(); video.attachCamera(camera); } else { trace("You need a camera."); } myService = new NetConnection(); myService.connect(gatewayURL); images = new Array(); loadImages(10); stage.addEventListener (MouseEvent.MOUSE_DOWN, handleMouseDown); stage.addEventListener (Event.RESIZE, handleResize); } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } public function handleResize (e:Event) { positionVideo(); } public function positionVideo(): void { if (stage.stageHeight / stage.stageWidth < 3/4 ) { video.width = stage.stageWidth; video.height = 3/4 * video.width; } else { video.height = stage.stageHeight; video.width = 4/3 * video.height; } video.x = stage.stageWidth / 2 - video.width/2; video.y = stage.stageHeight /2 - video.height/2; } public function handleMouseDown(e:Event):void { //trace (video.) var bd:BitmapData = new BitmapData(video.width / video.scaleX, video.height / video.scaleY, true, 0x000000); bd.draw(video); saveImageBD (bd, "cam_"+getTimer()+".jpg"); var bm:Bitmap = new Bitmap(bd); bm.x = Math.random() * stage.stageWidth; bm.y = Math.random() * stage.stageHeight; stage.addChild(bm); } /////////////////////////// // REMOTING CODE /////////////////////////// public function saveImageDO(src:DisplayObject, fileName:String, quality=50) { // create rpc responder var myResponder:Responder = new Responder (handleSaveImageSuccess, onStatusError); // make a new bitmap object var myBitmapSource:BitmapData = new BitmapData(src.width, src.height); // render the src as a bitmapdata myBitmapSource.draw(src); // create the encoder with the appropriate quality var myEncoder:JPEGEncoder = new JPEGEncoder(quality); // generate a JPG binary stream to have a preview var myCapStream:ByteArray = myEncoder.encode(myBitmapSource); // we store JPEG stream, to send it to distant service var streamObject:Object = {}; streamObject.fileName = fileName; streamObject.jpegstream = myCapStream; myService.call("PhotoBooth.saveToServer", myResponder, streamObject); } public function saveImageBD(src:BitmapData, fileName:String, quality=50) { // create rpc responder var myResponder:Responder = new Responder (handleSaveImageSuccess, onStatusError); // create the encoder with the appropriate quality var myEncoder:JPEGEncoder = new JPEGEncoder(quality); // generate a JPG binary stream to have a preview var myCapStream:ByteArray = myEncoder.encode(src); // we store JPEG stream, to send it to distant service var streamObject:Object = {}; streamObject.fileName = fileName; streamObject.jpegstream = myCapStream; myService.call("PhotoBooth.saveToServer", myResponder, streamObject); } private var loadImages_AMOUNT:int = 10; public function loadImages(amount:int) { // create rpc responder loadImages_AMOUNT = amount; var myResponder:Responder = new Responder (handleLoadImageSucesss, onStatusError); myService.call("PhotoBooth.GetTable", myResponder); } public function handleLoadImageSucesss (result:Array) { //trace (result); var i:int=0; while (true) { if (i >= loadImages_AMOUNT || i >= result.length) { break; } //for (var property in result[i]) { // trace (property); //} var url = "http://richard-c.com/look/photobooth/imagedir/"+result[i].filename; var img = new Image(url); img.x = Math.random() * stage.stageWidth; img.y = Math.random() * stage.stageHeight; images.push(img); addChild(img); i++; } } // handle success public function handleSaveImageSuccess(result:String):void { //trace("File saved on server as: "+result); trace(result); } // handle errors function onStatusError(error) { trace("error"); for (var p in error.fault ) trace( p ); } } }