<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView"><fx:Declarations><!-- Place non-visual elements (e.g., services, value objects) here --></fx:Declarations><fx:Script><![CDATA[import com.google.zxing.BarcodeFormat;import com.google.zxing.BinaryBitmap;import com.google.zxing.BufferedImageLuminanceSource;import com.google.zxing.DecodeHintType;import com.google.zxing.Result;import com.google.zxing.client.result.ParsedResult;import com.google.zxing.client.result.ResultParser;import com.google.zxing.common.BitMatrix;import com.google.zxing.common.ByteMatrix;import com.google.zxing.common.GlobalHistogramBinarizer;import com.google.zxing.common.flexdatatypes.HashTable;import com.google.zxing.qrcode.QRCodeReader;import com.google.zxing.qrcode.detector.Detector;import spark.events.ViewNavigatorEvent;protected var camera:Camera;private var videoDisplay:Video=new Video(360, 360);private var qrReader:QRCodeReader;private var bmd:BitmapData;private var cameraStarted:Boolean = false;protected function button1_clickHandler(event:MouseEvent):void{if (!cameraStarted) {if (Camera.isSupported){camera=Camera.getCamera();camera.setMode(360, 360, 24);videoDisplay.x = 360;sv.addChild(videoDisplay);videoDisplay.attachCamera(camera);videoDisplay.rotation=90;qrReader=new QRCodeReader;btn.label = "Scan Now";lbl.text = "";cameraStarted = true;}else {lbl.text = "no camera found";}}else {decodeSnapshot();}}public function decodeSnapshot():void{lbl.text="checking...";bmd=new BitmapData(300, 300);bmd.draw(videoDisplay, null, null, null, null, true);videoDisplay.cacheAsBitmap=true;videoDisplay.cacheAsBitmapMatrix=new Matrix;decodeBitmapData(bmd, 300, 300);bmd.dispose();bmd=null;System.gc();}public function decodeBitmapData(bmpd:BitmapData, width:int, height:int):void{var lsource:BufferedImageLuminanceSource=new BufferedImageLuminanceSource(bmpd);var bitmap:BinaryBitmap=new BinaryBitmap(new GlobalHistogramBinarizer(lsource));var ht:HashTable=null;ht=this.getAllHints();var res:Result=null;try {res=qrReader.decode(bitmap, ht);}catch (event:Error) {}if (res == null) {videoDisplay.clear();lbl.text="nothing decoded";}else {var parsedResult:ParsedResult=ResultParser.parseResult(res);lbl.text=parsedResult.getDisplayResult();sv.removeChild(videoDisplay);cameraStarted = false;btn.label = "Start Camera";}}public function getAllHints():HashTable{var ht:HashTable=new HashTable;ht.Add(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE);return ht;}]]></fx:Script><s:VGroup width="100%" horizontalAlign="center" id="vg"><s:SpriteVisualElement id="sv" width="360" height="400"/><s:Label id="lbl" text="" /><s:Button id="btn" label="Start Camera" width="220" height="93" click="button1_clickHandler(event)"/></s:VGroup>
</s:View>
public function decodeSnapshot():void
{lbl.text="checking...";bmd=new BitmapData(300, 300);bmd.draw(videoDisplay, null, null, null, null, true);videoDisplay.cacheAsBitmap=true;videoDisplay.cacheAsBitmapMatrix=new Matrix;decodeBitmapData(bmd, 300, 300);bmd.dispose();bmd=null;System.gc();
}public function decodeBitmapData(bmpd:BitmapData, width:int, height:int):void
{var lsource:BufferedImageLuminanceSource=new BufferedImageLuminanceSource(bmpd);var bitmap:BinaryBitmap=new BinaryBitmap(new GlobalHistogramBinarizer(lsource));var ht:HashTable=null;ht=this.getAllHints();var res:Result=null;try {res=qrReader.decode(bitmap, ht);}catch (event:Error) {}if (res == null) {videoDisplay.clear();lbl.text="nothing decoded";}else {var parsedResult:ParsedResult=ResultParser.parseResult(res);lbl.text=parsedResult.getDisplayResult();sv.removeChild(videoDisplay);cameraStarted = false;btn.label = "Start Camera";}
}public function getAllHints():HashTable
{var ht:HashTable=new HashTable;ht.Add(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE);return ht;
}
if (Camera.isSupported)
{camera=Camera.getCamera();camera.setMode(360, 360, 24);videoDisplay.x = 360;sv.addChild(videoDisplay);videoDisplay.attachCamera(camera);videoDisplay.rotation=90;qrReader=new QRCodeReader;btn.label = "Scan Now";lbl.text = "";cameraStarted = true;
}
else {lbl.text = "no camera found";
}