Android zxing学习

最近在学习 zxing ,发现了几篇不错的文章:

转载:

  1. zxing学习笔记(共六篇)
  2. zxing的逻辑梳理
  3. 直接接入zxing插件实现二维码扫描功能
  4. 如果要修改 ViewfinderView (扫描框)的大小,只要修改 CameraManager.java ,如下:
  5. //修改扫描框的大小,本质是通过修改 getFramingRect() 中的 width和height
    
    
    //修改这四个常量值的大小来改变 getFramingRect()中的width和height 
    private static final int MIN_FRAME_WIDTH = 400;
    private static final int MAX_FRAME_WIDTH = 580;
    private static final int MIN_FRAME_HEIGHT = 400;
    private static final int MAX_FRAME_HEIGHT = 500;
    
    
    //或者不用这几个值,自己定义width和height的大小
    public Rect getFramingRect() {
    
        Point screenResolution = configManager.getScreenResolution();
        if (framingRect == null) {
    
            if (camera == null) {
                return null;
            }
    //      int width = screenResolution.x * 3 / 4;
    //      if (width < MIN_FRAME_WIDTH) {
    //          width = MIN_FRAME_WIDTH;
    //      } else if (width > MAX_FRAME_WIDTH) {
    //          width = MAX_FRAME_WIDTH;
    //      }
    //      int height = screenResolution.y * 3 / 4;
    //      if (height < MIN_FRAME_HEIGHT) {
    //          height = MIN_FRAME_HEIGHT;
    //      } else if (height > MAX_FRAME_HEIGHT) {
    //          height = MAX_FRAME_HEIGHT;
    //      }
    
            int width = dip2px(200);
            int height = dip2px(200);
    
            int leftOffset = (screenResolution.x - width) / 2;
            int topOffset = (screenResolution.y - height) / 2;
            framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);
            Log.d(TAG, "Calculated framing rect: " + framingRect);
        }
        return framingRect;
    }
    
    public int dip2px(float dipValue) {
        
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    当使用 zxing 扫描二维码时,出现了近距离无法识别扫描出结果,必须距离很远才能识别的问题(放大识别区域也无效)。

解决方法:修改扫描距离,修改CameraConfigurationManager.java如下:(亲测有效)

void setDesiredCameraParameters(Camera camera) {  

    //注释掉该部分代码,替换成下面的
    //Camera.Parameters parameters = camera.getParameters();
  
    //Log.d(TAG, "Setting preview size: " + cameraResolution);
  
    //parameters.setPreviewSize(cameraResolution.x, cameraResolution.y);
  
    //setFlash(parameters); 
 
    //setZoom(parameters);  

    ////setSharpness(parameters); 

    ////modify here  
    //camera.setDisplayOrientation(90);
  
    //camera.setParameters(parameters); 

    //替换如下
    Camera.Parameters parameters = camera.getParameters();  

    List<Camera.Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();  

    int position =0;  

    if(supportedPreviewSizes.size()>2){  

        position=supportedPreviewSizes.size()/2+1;

        //supportedPreviewSizes.get();  

    } else{  

        position=supportedPreviewSizes.size()/2;  
    }  

    int width = supportedPreviewSizes.get(position).width;  

    int height = supportedPreviewSizes.get(position).height;    

    camera.setDisplayOrientation(90);  

    cameraResolution.x=width;  

    cameraResolution.y=height;  

    Log.d(TAG, "Setting preview size: " + cameraResolution);

    parameters.setPreviewSize(width,height);  

    setFlash(parameters);  

    setZoom(parameters);  

    //setSharpness(parameters);  

    camera.setParameters(parameters); 
}

猜你喜欢

转载自blog.csdn.net/fitaotao/article/details/83790549