1. 程式人生 > >Android Zxing二維碼掃描圖片拉伸、掃描框過小、掃描框擴大後(或不拉伸後)閃退問題

Android Zxing二維碼掃描圖片拉伸、掃描框過小、掃描框擴大後(或不拉伸後)閃退問題

(一)Zxing二維碼掃描框大小調整


控制掃描框大小程式碼是在CameraManager類中

google在CameraManager類中設定掃描框大小主要在getFramingRect()中:

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


我們修改getFramingRect()這個方法,不再使用預設的固定大小,而是根據實際裝置的螢幕大小設定
 public Rect getFramingRect() {
    Point screenResolution = configManager.getScreenResolution();
    if (framingRect == null) {
      if (camera == null) {
        return null;
      }
     DisplayMetrics metrics = context.getResources().getDisplayMetrics();
     int width = (int)(metrics.widthPixels * 0.6);
     int height = (int)(width * 0.9); 
     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;
  }


以上方式可以實現掃描框擴大,但是部分機型會出現,掃描後閃退現象,原因是在 MipcaActivityCapture的handleDecode中向bundle中新增的bitmap過大,程式碼是bundle.putParcelable("bitmap", barcode);  handleDecode是用來處理掃描結果的,例如向呼叫MipcaActivityCapture的Activity回傳掃描結果和掃描得到的bitmap。但bitmap不能過大超出記憶體限制就會奔潰。

解決的辦法:如果不需要顯示掃描得到的圖片,我們可以不將bitmap匯入bundle,直接將bundle.putParcelable("bitmap", barcode)註釋掉。

                     如果一定要獲得bitmap,則需要在匯入前將bitmap壓縮

(二)Zxing是google提供的二維碼掃描工程

掃描框預設是橫屏的轉換成豎屏後圖片會出現拉伸現象

解決的辦法:

Zxing  修改 CameraConfigurationManager.Java檔案的

void initFromCameraParameters(Camera camera)方法,在 Log.d(TAG, "Screen resolution: " + screenResolution);這句之後增加

Point screenResolutionForCamera = new Point();  
        screenResolutionForCamera.x = screenResolution.x;  
        screenResolutionForCamera.y = screenResolution.y;  
        // preview size is always something like 480*320, other 320*480  
        if (screenResolution.x < screenResolution.y) {  
        screenResolutionForCamera.x = screenResolution.y;  
        screenResolutionForCamera.y = screenResolution.x;  
        }  
同時把之後的程式碼如
cameraResolution = getCameraResolution(parameters, screenResolution); 
修改為
cameraResolution = getCameraResolution(parameters, screenResolutionForCamera);  
經過如上操作後基本可以解決,圖片拉伸的問題,但是部分機型會出現,掃描後閃退現象,原因和擴大掃描框後出現閃退的原因類似,基本是bitmap過大的原因。

相關推薦

Android Zxing掃描圖片掃描掃描擴大退問題

(一)Zxing二維碼掃描框大小調整 控制掃描框大小程式碼是在CameraManager類中 google在CameraManager類中設定掃描框大小主要在getFramingRect()中: private static final int MIN_F

Android ZXing 條形碼掃描介紹

點選開啟連結http://www.open-open.com/lib/view/open1387370683671.html ZXing是一個開源Java類庫用於解析多種格式的條形碼和二維碼.官網

Android ZXing掃一掃

大概效果如下 測試的時候使用6.0有點問題,點選掃一掃會出現閃退的現象,使用更高版本的就不會出現這種現象 具體解決方法可查詢度娘 因為在模擬器上測試部分效果沒有展示,但是在真機上測試過完全可以使用 注意一點 動態許可權 要在根的build.gradle裡面加入 在專案的build.gra

zxing解析圖片資源

前面講了如何利用zxing生成二維碼影象以及仿照新浪微博方式生成二維碼。接下來,就要開始談到如何利用zxing解析二維碼影象。 zxing針對不同開發平臺,都給出瞭解析二維碼的例子,我這裡只聊聊關於android系統的解析。 對於android手機來說,二維碼影象獲取方式有

Android ZXing條形碼的生成和解析

ZXing(Zebra Crossing)是Google開發的一個二維碼解析和生成的開源庫。 近期的一個手錶專案需要用到二維碼生成,於是就研究了一下。實現起來很簡便,將jar包放入工程,就可以直接使用API了。 裝置將位置資訊更新給伺服器,在瀏覽器輸入URL訪問指定ID裝

android zxing橫屏改豎屏

1.修改manifest檔案,將CaptureActivity的screenOrentatino設為portrait。 2.攝像頭調整為豎向在CameraConfigurationManager類中新增如下方法: protected void setDisplayOr

Android Zxing 效能優化

最近再一次做到了掃碼專案,掃碼出現的掃碼效能問題再次擺上了案頭,經過自己研究並與同行溝通後得出了目前自己能做到的對掃碼效能優化的處理。 1、精簡解碼碼制 目前 github 上 Zxing 支援的碼制 國內常用的有二維碼 QR Code 以及各種條碼 在這裡具體做法就是在

android ZXing 的實現與demo

android 的二維碼實現,現在越來越普遍,每一個app差不多都會擁有自己的二維碼,它就像身份的象徵, 但是如何實現那?下面我為大家詳細的講解一下。 整合二維碼的步驟; 整合預設的二維碼掃描頁面 1.新增依賴 compile 'cn.yipianfengye.androi

Android項目實戰四十四Zxing切換橫屏掃描

pla xxx mage tde min bar 分享圖片 spl 發現 原文:Android項目實戰(四十四):Zxing二維碼切換橫屏掃描Demo鏈接 默認是豎屏掃描,但是當我們在清單文件中配置橫屏顯示的時候: <activity

Android 基於Zxing掃描的光速實現

Android 十分鐘光速實現二維碼掃描 前言 在專案中要使用到二維碼的相關內容,我們第一時間想到的是使用大名鼎鼎的zxing或者ZBar開源框架: 除了這兩個有名的框架之外,還有@bingoogolapple大神的掃描庫 以及國外@dlaz

Android實現掃描功能-ZXing個性化與近距離識別優化

簡介 本篇我們對掃碼介面進行優化,並對ZXing近距離無法識別的問題做出優化。 個性化定製 每個APP都有自己的表現形式,實現個性化掃碼介面定製,主要有兩個地方: activity_scanner.xml介面檔案 com.google.zxin

Android實現掃描仿微信,輕量Zxing

前言 要做一個功能,二維碼識別。網上找一堆相關的Demo,但是總不是想要的效果,或者都是多年前的版本,權衡考慮之後,決定親自操刀。不糾結直接選中Zxing框架,https://github.com/zxing/zxing 在網站上直接clone下來,執行,然後就發現問題了.

android 和 phonegap(Cordova)互動使用Zxing掃描

android方面的配置:配置環境,下載、編譯Zxing原始碼,整合進專案 1、環境下載、安裝,編譯Zxing原始碼 下載Zxing原始碼地址:https://github.com/zxing/zxing 其中android資料夾下為一個功能應用,有

Android Zxing 相簿/條碼圖片識別

Android Zxing相簿二維碼/條碼圖片識別 在網上搜了好多例子放到專案中都會有些問題,有的是隻能識別二維碼圖片無法識別條碼圖片,有的是可以識別條碼但是識別率特別低。下面就介紹我整理過後在專案中使用的相簿圖片二維碼條碼識別整合步驟。 第一步 新

Zxing掃描

ram zxing oss lean 預覽 surface ott serial pac 源代碼地址 有問題能夠加QQ:312122330 之前對於Zbar的二位碼掃描。到項目上線以後才發現掃描過於靈敏。導致有時候掃描到半截就啟動了。 後來翻看ZXIN

android Studio 掃一掃 使用精簡zxing

storage lse AD util onclick result 添加 UC ng- 今天學習做個掃一掃 於是就上百度找找前人的作品,終於找到了,於是就開始搞 我使用的是 最新的android Studio Android Studio 3.1.2Build #A

Android生成--儲存和分享圖片

    之前寫過生成自定義二維碼的兩篇文章:《Android生成自定義二維碼》《Android生成二維碼–拍照或從相簿選取圖片》,下面就介紹一下Android應用內如何儲存以及分享二維碼圖片。   儲存圖片      Adnroid中儲存圖片可

Zxing掃描的整合與優化

Zxing已經是一個很成熟的框架了,但它是用maven構建的專案,在以gradle為基礎的AS中整合起來總感覺不太方便。網上有很多種方式,我這裡主要採取了複製程式碼到自己專案中的方式,這樣有利於學習和擴充套件。 第一步:整合 官方專案地址:https://github.com

Android掃描與產生模組

第一步:將libzxing Modile匯入專案中 點選OK,然後點選File——Structure——專案名——dependencies——libzxing——OK 這樣我們的依賴關係就建立好了; 第二步:介面,activity_main.xml <

Android生成--拍照從相簿選取圖片

private void handleImageOnKitKat(Intent data) { String imagePath = null; Uri uri = data.getData(); if (DocumentsContract.isDocumentUri(this, ur