1. 程式人生 > >一掃天下——ZXing使用全解析

一掃天下——ZXing使用全解析

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

一掃天下——ZXing使用全解析

二維碼現在已經爛App了,不管什麼App,沒有二維碼就好像低人一等了。所以,在自己的專案中整合二維碼功能還是非常有必要的。

網上很多都是基於ZXing2.3的,但是現在都3.1了,改了很多bug,也進行了很多優化,最好按本文弄一下。

參拜ZXing

ZXing的github地址:
https://github.com/zxing/zxing

通過git clone [email protected]:zxing/zxing.git 命令我們可以把整個ZXing專案拉取下來。

這裡寫圖片描述

然而這並沒有什麼卵用。

因為ZXing的專案是非常龐大的,功能也非常多,但是我們不需要這麼多,我們只關心Android部分的。

獲得ZXing的祝福之jar

在使用ZXing之前,我們需要先編譯它的jar包,我們可以看見原始碼目錄中有一個core的目錄,我們可以把這個資料夾匯入eclipse作為一個java工程。最後通過export匯出一個jar包。

獲得ZXing核心功能

我們需要把核心的掃碼、解碼功能抽取出來,這一步,網上已經有很多人做過了,只是大部分都是基於第一個抽ZXing的人,而那個是基於ZXing1.5、2.3的,所以,記得要進行Update哦。

那麼我們如何獲得最新的ZXing程式碼呢,很簡單,找一箇舊的,然後把最新的程式碼一個個copy過去替換就好了,當然,還是會有一些問題,不過一步步解決就可以了,都不是很大的問題。

飯來張口

這裡為大家也提供一個封裝好的最新的ZXing Lib:

https://github.com/xuyisheng/ZXingLib

基於ZXing3.1封裝,包含了最新的jar包和程式碼。

解析

CaptureActivity

ZXing暴露的呼叫Activity。在handleDecode方法中對掃碼成功後的動作作處理。

ViewfinderView

ZXing掃碼視窗的繪製,原始的ZXing使用這種方式去繪製,在上面提供的開源庫中,作者將掃描框的繪製直接抽取到了XML檔案中,這樣修改起來更加方便了。

CameraConfigurationManager

修改橫豎屏、處理變形效果的核心類。

在public void setDesiredCameraParameters(Camera camera, boolean safeMode)方法中(讀取配置設定相機的對焦模式、閃光燈模式等等),可以將掃描改為豎屏:

即:
在方法最後加上:

/** 設定相機預覽為豎屏 */camera.setDisplayOrientation(90);
   
  • 1
  • 2

即可。

在public void initFromCameraParameters(Camera camera)方法中(計算了螢幕解析度和當前最適合的相機畫素),我們可以對修改為豎屏掃碼後,由於畫素資訊點沒有對調造成影象扭曲變形進行修改。

即:

在Log.d(TAG, “Screen resolution: ” + 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;}
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

最後,將screenResolution替換為screenResolutionForCamera:

cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);
   
  • 1
  • 2

DecodeHandler.decode

ZXing解碼的核心類

CaptureActivityHandler

當DecodeHandler.decode完成解碼後,系統會向CaptureActivityHandler發訊息。如果編碼成功則呼叫CaptureActivity.handleDecode方法對掃描到的結果進行分類處理。

最後

本文的Github中已經包含了前面所提到的所有修改(橫豎屏、扭曲變形),用最新的ZXing程式碼進行了update,同時提供了編碼、解碼方法,並且將掃碼介面抽取成XML(感謝開源作者),方便拓展。

https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib

重要的東西發三遍。

以上。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述