ZXing扫描的优化

斑马线扫描优化 

  1.  将AndroidManifest中的屏幕对齐方式改为android:screenOrientation =“portrait”;
  2. CameraConfigurationManager类的setDesiredCameraParameters()方法中在camera.setParameters(参数)之前加入设置相机后摄像头的方向为90       theCamera.setDisplayOrientation(90);
  3. CameraManager 类的 getFramingRectInPreview() 方法中原来的方法注销更替为新代码,这样写的目的其实就是将相机旋转90之后,获取宽高也需要变更。
    /*rect.left = rect.left * cameraResolution.x / screenResolution.x;
     rect.right = rect.right * cameraResolution.x / screenResolution.x;
     rect.top = rect.top * cameraResolution.y / screenResolution.y;
     rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;*/
    rect.left = rect.left * cameraResolution.y / screenResolution.x;
    rect.right = rect.right * cameraResolution.y / screenResolution.x;
    rect.top = rect.top * cameraResolution.x / screenResolution.y;
    rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
  4. DecodeHandler 类的 解码 方法中在activity.getCameraManager()。buildLuminanceSource()之前添加以下代
     
        
    byte[] rotatedData = new byte[data.length];
    for (int y = 0; y < height; y++) {
      for (int x = 0; x < width; x++)
        rotatedData[x * height + height - y - 1] = data[x + y * width];
    
    }
    int tmp = width;
    width = height;
    height = tmp;
    data = rotatedData;
  5. 解决竖屏拉伸问题
    CameraConfigurationManager类的initFromCameraParameters()方法中:
    在Log.i(TAG,“屏幕分辨率”+ screenResolution);之后添加以下代码:
     
        
    Point screenResolutionForCamera = new Point();
    screenResolutionForCamera.x = screenResolution.x;
    screenResolutionForCamera.y = screenResolution.y;
    if (screenResolution.x < screenResolution.y) {
      screenResolutionForCamera.x = screenResolution.y;
      screenResolutionForCamera.y = screenResolution.x;
    }
    同时修改下一句为cameraResolution = findBestPreviewSizeValue(parameters,screenResolutionForCamera);
  6. 框扫描位置大小:修改 此时的扫描框的竖直拉伸的矩形,很难看,我们可以将其修改为正方形或扁平型的。
    CameraManager 类的getFramingRect()方法中替换以下代码:
     
       
    /* int width = findDesiredDimensionInRange(screenResolution.x, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH);
     int height = findDesiredDimensionInRange(screenResolution.y, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT);*/
     DisplayMetrics metrics = context.getResources().getDisplayMetrics();
     int width = (int) (metrics.widthPixels * 0.625);
     int height = (int) (width * 0.9);
    此处我们根据屏幕分辨率来定扫描框大小更灵活一点,同时将偏移量topOffset修改为 int topOffset = (screenResolution.height) / 3;
  7. 框扫描四个角状语从句:扫描线条修改
    。示例代码中的线条的英文居中且不动的,我们可以将其修改为上下移动的扫描线,可以御姐改变线条的样式
    在自定义扫描布局ViewfinderView类中的的onDraw()中方法绘制四个角,关键代码如下:
    //左上角
     canvas.drawRect(frame.left,frame.top,frame.left+ CORNER_WIDTH,frame.top+ CORNER_HEIGHT,paint);
     canvas.drawRect(frame.left,frame.top,frame.left + CORNER_HEIGHT,frame.top + CORNER_WIDTH,paint);
    //左下角
     canvas.drawRect(frame.left,frame.bottom - CORNER_HEIGHT,frame.left + CORNER_WIDTH,frame.bottom,paint);
     canvas.drawRect(frame.left,frame.bottom - CORNER_WIDTH,frame.left + CORNER_HEIGHT,frame.bottom,paint);
    //右上角
     canvas.drawRect(frame.right- CORNER_WIDTH,frame.top,frame.right,frame.top+ CORNER_HEIGHT,paint);
     canvas.drawRect(frame.right - CORNER_HEIGHT,frame.bottom,frame.right,frame.top + CORNER_WIDTH,paint);
    //右下角
     canvas.drawRect(frame.right - CORNER_HEIGHT,frame.bottom - CORNER_WIDTH,frame.right,frame.bottom,paint);
     canvas.drawRect(frame.right - CORNER_WIDTH,frame.bottom - CORNER_HEIGHT,frame.right,frame.bottom,paint);
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值