zoukankan      html  css  js  c++  java
  • Android下利用zbar类库实现扫一扫

    程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zbardemo.zip

    Android下常用的条码扫描类库有zxing和zbar,比较了一下,发现zbar扫描速度更快,能够识别的条码类型更多,下面就讲解一下如何利用zbar实现扫一扫,先放上一张效果图:

    主要代码如下:

     1.在onPreviewFrame方法里获取预览图像,然后传递给DecodeHandler去解析

     @Override
      public void onPreviewFrame(byte[] data, Camera camera) 
      {
    	 if (!useOneShotPreviewCallback) 
    	 {
    	   camera.setPreviewCallback(null);
    	 }
    	 if(previewHandler != null) 
    	 {
    		Camera.Parameters parameters = camera.getParameters();
    	    Size size = parameters.getPreviewSize();
    	    Message message = previewHandler.obtainMessage(previewMessage, size.width,size.height, data);
    	    message.sendToTarget();
    	    previewHandler = null;
    	 } 
    	 else 
    	 {
    	    Log.d(TAG, "Got preview callback, but no handler for it"); 
    	 }
    	 
       }
    

    2. 在decode方法里调用zbar类库对图像进行解析

     private void decode(byte[] data, int width, int height) {
    
        Image barcode = new Image(width, height, "Y800");
    	Rect scanImageRect = activity.getViewfinderView().getScanImageRect(height,width);
        barcode.setCrop(scanImageRect.top, scanImageRect.left, scanImageRect.bottom, scanImageRect.right);
        barcode.setData(data);
    
        int result = scanner.scanImage(barcode);
        String strResult="";
        if (result != 0) 
        {
           SymbolSet syms = scanner.getResults();
           for (Symbol sym : syms)
           {
        	   strResult=sym.getData().trim();
        	   if(!strResult.isEmpty())
        	   {
                 break;
        	   }
           }
        }
        
        if(!strResult.isEmpty())
        {
           Message message = Message.obtain(activity.getHandler(), R.id.decode_succeeded, strResult);//Message信息传来传去,有点绕
           Log.d(TAG, "Sending decode succeeded message...");
           message.sendToTarget();
        } 
        else 
        {
            Message message = Message.obtain(activity.getHandler(), R.id.decode_failed);
            message.sendToTarget();
        }
      }
    

      

  • 相关阅读:
    React简明学习
    react-router简明学习
    react组件生命周期
    在vue中使用css modules替代scroped
    深入理解javascript中的事件循环event-loop
    javascript中的内存管理和垃圾回收
    移动端中的陀螺仪
    基于create-react-app的再配置
    vscode常用设置
    更高效地使用搜索引擎
  • 原文地址:https://www.cnblogs.com/rainboy2010/p/4677651.html
Copyright © 2011-2022 走看看