Android Zxing调整扫描区域 优化取图速度

Zxing 是google提供的二维码扫描工程
Demo本身默认的扫图区域最大只有 360*480    需要拉开很远的距离才能将整个二维码扫描到
因此需要我们自己调整取图大小

在CameraManager.java这个类中进行调整
默认的大小是 以下这4个参数
[html] view plaincopy在CODE上查看代码片派生到我的代码片
//  private static final int MIN_FRAME_WIDTH = 240; 
//  private static final int MIN_FRAME_HEIGHT = 240; 
//  private static final int MAX_FRAME_WIDTH = 480; 
//  private static final int MAX_FRAME_HEIGHT = 360; 

根据屏幕大小调整      大家可以增大这些数值 : 最小的宽 高    ; 最大宽高

参数实际在 getFramingRect() 方法中起作用
以下是原本Demo中提供的
[java] view plaincopy在CODE上查看代码片派生到我的代码片
/**
  * Calculates the framing rect which the UI should draw to show the user where to place the
  * barcode. This target helps with alignment as well as forces the user to hold the device
  * far enough away to ensure the image will be in focus.
  *
  * @return The rectangle to draw on screen in window coordinates.
  */ 
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 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; 


我为了适配不同的屏幕大小将代码改成了
[java] view plaincopy在CODE上查看代码片派生到我的代码片
public Rect getFramingRect() { 
  Point screenResolution = configManager.getScreenResolution(); 
  if (framingRect == null) { 
    if (camera == null) { 
      return null; 
    } 
     
  //修改之后   
  int width = screenResolution.x * 7 / 10; 
  int height = screenResolution.y * 7 / 10; 
   
  int leftOffset = (screenResolution.x - width) / 2; 
  int topOffset = (screenResolution.y - height) / 3; 
  framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); 
     
     
    Log.d(TAG, "Calculated framing rect: " + framingRect); 
  } 
  return framingRect; 

宽高 我占据了屏幕的   7/10
当然...取图改的这么大   会多占一点内存....相应的扫描的时候快得多

以上是实际读取图片的大小
实际的界面美化 在ViewfinderView 这个类当中进行绘制

不足之处请在下方留言  谢谢
希望对您有用

猜你喜欢

转载自niuniulife2011.iteye.com/blog/2219229