您的位置:首页 > 编程语言 > Go语言

使用Google的zxing组件识别二维码时,调整扫描区域和取景框的大小

2017-04-24 16:52 519 查看
Zxing 是google提供的二维码扫描工程
Demo本身默认的扫图区域最大只有 360*480    需要拉开很远的距离才能将整个二维码扫描到
因此需要我们自己调整取图大小
 
在CameraManager.java这个类中进行调整
默认的大小是 以下这4个参数 
//  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中提供的
/** 
  * 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;  
 }  
我为了适配不同的屏幕大小将代码改成了

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 这个类当中进行绘制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: