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();
        }
      }
    

      

  • 相关阅读:
    Vue 路由的编程式导航与history模式
    Vue 路由配置、动态路由
    Vue 组件传值
    Vue 组件以及生命周期函数
    Vue 封装js
    记一次proc_open没有开启心得感悟
    面向内容的标记语言--markdonw
    浅谈索引
    mysql主从配置
    centos7下操作防火墙
  • 原文地址:https://www.cnblogs.com/rainboy2010/p/4677651.html
Copyright © 2011-2022 走看看