<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="startWebcam()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.formatters.DateFormatter;
import flash.net.navigateToURL;
import com.dynamicflash.util.Base64;
import mx.controls.Alert;
import mx.events.ListEvent;
import mx.collections.ArrayCollection;
private var webcam:Camera;
private var imageName:String = '';
public function startWebcam():void {
try {
webcam = Camera.getCamera();
webcam.setQuality(65538, 0);
webcam.setMode(320, 240, 25, false);
videoDisplay.attachCamera(webcam);
catalog.dataProvider = new ArrayCollection;
takeBtn.enabled = true;
} catch (e:*) {
Alert.show("La webcam n'a pas été détectée", "Erreur");
return;
}
}
public function takeSnapshot():void{
var snapshot:BitmapData = new BitmapData(320, 240, true);
var snapshotbitmap:Bitmap = new Bitmap(snapshot);
snapshot.draw(videoDisplay);
(catalog.dataProvider as ArrayCollection).addItem({source: snapshotbitmap});
catalog.selectedIndex = (catalog.dataProvider as ArrayCollection).length;
select();
}
public function select():void {
if(catalog.selectedItem) {
selectedSnapshot.source = new Bitmap((catalog.selectedItem.source as Bitmap).bitmapData);
downloadBtn.enabled = true;
} else {
downloadBtn.enabled = false;
}
}
private function uploadSnapshot():void {
if(selectedSnapshot.source) {
var jpgEncoder:JPEGEncoder = new JPEGEncoder(75);
var jpgBytes:ByteArray = jpgEncoder.encode((selectedSnapshot.source as Bitmap).bitmapData);
uploadPhoto(jpgBytes);
}
}
private function uploadPhoto(imageData:ByteArray):void {
var request:URLRequest = new URLRequest("upload.php");
var vars:URLVariables = new URLVariables();
vars.imagedata = Base64.encodeByteArray(imageData);
vars.imagename = getNewImageName();
request.method = "POST";
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, uploadPhotoHandler);
request.data = vars;
loader.load(request);
}
private function getNewImageName():String {
var formatter:DateFormatter = new DateFormatter();
formatter.formatString = 'YYYY-MM-DD_J:NN:SS';
imageName = 'myWebcamImage_' + formatter.format(new Date) + '.jpg';
return imageName;
}
private function uploadPhotoHandler(e:Event):void {
downloadPhoto(imageName);
}
private function downloadPhoto(photo:String):void {
var request:URLRequest = new URLRequest('download.php');
var vars:URLVariables = new URLVariables();
vars.photo = photo;
request.method = "POST";
request.data = vars;
navigateToURL(request,'_self');
}
]]>
</mx:Script>
<mx:VBox paddingTop="50" paddingLeft="50" paddingRight="50" paddingBottom="50" horizontalAlign="center" verticalGap="20">
<mx:HBox width="100%" horizontalAlign="center" horizontalGap="50">
<mx:VBox horizontalAlign="center">
<mx:VideoDisplay width="320" height="240" id="videoDisplay"/>
<mx:Button label="Take Snapshot" id="takeBtn" enabled="false" click="takeSnapshot()"/>
</mx:VBox>
<mx:VBox horizontalAlign="center">
<mx:Image width="320" height="240" id="selectedSnapshot"/>
<mx:Button label="Download Image" id="downloadBtn" enabled="false" click="uploadSnapshot()"/>
</mx:VBox>
</mx:HBox>
<mx:TileList width="100%" height="200" id="catalog" itemRenderer="MyItemRenderer" change="select()" rowHeight="48" columnWidth="64" />
</mx:VBox>
</mx:Application>