• Adding a QR Code Reader in Flex on Android




    <?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, 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, 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";
    }
    
  • 相关阅读:
    Java实现 蓝桥杯 历届试题 翻硬币
    后台管理UI推荐
    js跳转页面方法(转)
    Request常用方法 (总结)
    Eclipse项目 迁移到 Intellj IDEA
    由后端来类比前端设计的思考(转)
    数据库字段命名及设计规范(转)
    如何改变Myeclipse编辑区背景色(转)
    Myeclipse和windows调节成护眼色
    qt截获html请求(继承QNetworkAccessManager和QNetworkReply)
  • 原文地址:https://www.cnblogs.com/ggzjj/p/3612850.html
Copyright © 2020-2023  润新知