當前位置:首頁 » 操作系統 » zxing源碼分析

zxing源碼分析

發布時間: 2022-07-06 18:30:53

A. 如何使攝像頭掃描二維碼,然後解析二維碼 java源碼 zxing

import com.google.zxing.common.BitMatrix;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.OutputStream;
import java.io.IOException;
import java.awt.image.BufferedImage;

public final class MatrixToImageWriter {

private static final int BLACK = 0xFF000000;
private static final int WHITE = 0xFFFFFFFF;

private MatrixToImageWriter() {}

public static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
}
}
return image;
}

public static void writeToFile(BitMatrix matrix, String format, File file)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, file)) {
throw new IOException("Could not write an image of format " + format + " to " + file);
}
}

public static void writeToStream(BitMatrix matrix, String format, OutputStream stream)
throws IOException {
BufferedImage image = toBufferedImage(matrix);
if (!ImageIO.write(image, format, stream)) {
throw new IOException("Could not write an image of format " + format);
}
}

}

B. 如何用Zxing解析pdf417-Android開發問答

1.如何將zxing的Android源碼導入工程。
在導入zxing的android源碼之前,先去官方下載zxing的源碼:http://code.google.com/p/zxing/downloads/list。
我這里下載的是1.6版本的,我試驗了幾個版本,發現2.0以後的版本實際用起來沒有1.6和1.7版本的好用,最後選擇了1.6版本。

在導入之前先要對core文件下的源碼進行編譯,得到核心包core.jar。
編譯方法請參照:http://blog.163.com/yimigao@126/blog/static/671560502011611111116747/
然後就可以導入android平台下的例子了,導入方法如下:
1)打開Eclipse,新建android項目:(注意不要直接把android文件夾拷到workspace下導入,那樣會無法導入)

2)導入核心包core.jar。
3)修改strings.xml文件。在導入core.jar之後工程還是會有錯誤:

出現這種錯誤可能是由於字元錯誤導致的,只需要把所有的%s 和%f改成 %1s和f 即可。
修改完之後重新清理項目,此時已經沒有錯誤了:

2.代碼簡化
上面代碼中,很多功能我們在自己的項目中都用不到,因此需要對其進行簡化,至於如何簡化這里就不贅述了,網上有很多教程。下面只給出簡化後的結果:

如果只進行二維碼識別和二維碼生成的話,只需要上麵包中的文件。其中CaptureActivity.java是拍照取景的類,camera包下面的類主要與照相機相關的類,decoding和encoding是解碼和編碼相關的類,view是取景框相關的類。
3.將簡化的zxing代碼嵌入自己的工程。
在自己的工程中嵌入簡化的zxing代碼即可實現二維碼生成和識別功能。
嵌入方法:
1)將上述簡化的代碼拖到自己工程目錄下;
2)將values文件夾和raw文件夾復制自己工程目錄下;
3)建立CaptureActivity.java的布局文件capture.xml。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<SurfaceView
android:id="@+id/preview_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />

<com.zxing.view.ViewfinderView
android:id="@+id/viewfinder_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:gravity="center"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="Scan Barcode"
android:textColor="@android:color/white"
android:textSize="18sp"
android:textStyle="bold" />

<Button
android:id="@+id/btn_cancel_scan"
android:layout_width="230dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="75dp"
android:text="Cancel"
android:textSize="15sp"
android:textStyle="bold" />

</RelativeLayout>

</FrameLayout>

3)導入core.jar包
4)修改AndrodMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qrcode"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />

<uses-permission android:name="android.permission.VIBRATE" /> <!-- 震動許可權 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" /> <!-- 使用照相機許可權 -->
<uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自動聚焦許可權 -->

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<!-- 隱藏鍵盤 --><!-- 全屏 -->
<activity
android:configChanges="orientation|keyboardHidden"
android:name="com.zxing.activity.CaptureActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden" >
</activity>

</application>
</manifest>

C. 如何快速識別一串代碼的編譯方式 又如何解碼

這里簡單介紹一下ZXing庫。ZXing是一個開放源碼的,用Java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯繫到其他語言的埠。Zxing可以實現使用手機的內置的攝像頭完成條形碼的掃描及解碼。該項目可實現的條形碼編碼和解碼。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39碼、93碼。ZXing是個很經典的條碼/二維碼識別的開源類庫,以前在功能機上,就有開發者使用J2ME運用ZXing了,不過要支持JSR-234規范(自動對焦)的手機才能發揮其威力。
下面是ZXing的demo運行,我這里創建了一個二維碼,內容是我博客的網址,大夥可以用微信的掃一掃功能,試一下。就可以直接打開我博客。

D. 有誰知道用zxing.dll在windows下使用時(識別二維碼)該動態庫的函數說明

本來zxing的c++部分不是為windows准備的,在windows中編譯應該用mingw比較合適。但我不熟悉這個。今天試一下,似乎可以在VS2008編譯。雖然有很多問題,不過都可以解決的。
大概有如下問題:

1。isnan, NAN, INFINITY, fmax等一些常量或函數找不到,這是linux與windows包含文件的差異。自己創建就行,我做在nan.cpp和nan.h之中。

2。文件同名:可以把那些文件編譯到不同目錄,這樣就不會干擾了。默認是編譯到同一個目錄。

3。變長數組的語法:GCC支持變長的數組變數,比如
void gcc(int len) {
int data[len];
}
但VC不支持,所以很多地方都要改過來。我的做法是:查到它所有的調用之處,找一個比較大的數值來取代len。

4。iconv.h: 要下載:
http://gnuwin32.sourceforge.net/packages/libiconv.htm
需要DLL和lib導入庫。我上傳的代碼不用iconv。通過設置NO_ICONV,可以不需要libiconv,但是掃描結果也沒有轉換,需要調用方自己做字元集轉換。

經過這些,應該可以編譯了。

編譯它的示例:
這要求有ImageMagick,直接下載一個安裝,
安裝完成後,新建一個windows控制台項目,導入示例,設置好ImageMagick和zxing頭文件和庫文件目錄。編譯後,運行。
我放在zxtest項目中。

根據示例,寫pascal介面,這部分代碼放在ZXingDLL中。

通過分析,LuminanceSource應該是一個zxing分析圖像的介面,要從這個派生出來一個類才能讓zxing工作。示例是用MagickBitmapSource ,它用了ImageMagick庫,太大,所以我分析了源碼,發現只要輸出灰度就行了,這樣我在DELPHI中獲取圖像,然後轉成灰度圖,再轉進來。具體看我的DELPHI和lazarus代碼。

E. android zxing需要哪些許可權

在導入zxing的android源碼之前,先去官方下載zxing的源碼:http://code.google.com/p/zxing/downloads/list。
我這里下載的是1.6版本的,我試驗了幾個版本,發現2.0以後的版本實際用起來沒有1.6和1.7版本的好用,最後選擇了1.6版本。
zxing 1.6源碼結構如下:

F. Android二維碼識別源碼,可有多種實現方式

這里簡單介紹一下ZXing庫。ZXing是一個開放源碼的,用Java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯繫到其他語言的埠。Zxing可以實現使用手機的內置的攝像頭完成條形碼的掃描及解碼。該項目可實現的條形碼編碼和解碼。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39碼、93碼。ZXing是個很經典的條碼/二維碼識別的開源類庫,以前在功能機上,就有開發者使用J2ME運用ZXing了,不過要支持JSR-234規范(自動對焦)的手機才能發揮其威力。
下面是ZXing的demo運行,我這里創建了一個二維碼,內容是我博客的網址,大夥可以用微信的掃一掃功能,試一下。就可以直接打開我博客。

2、ZXing庫主要類
下面給大家介紹一下,ZXing庫裡面主要的類以及這些類的作用:
CaptureActivity。這個是啟動Activity 也就是掃描器。
CaptureActivityHandler 解碼處理類,負責調用另外的線程進行解碼。
DecodeThread 解碼的線程。
com.google.zxing.client.android.camera 包,攝像頭控制包。
ViewfinderView 自定義的View,就是我們看見的拍攝時中間的框框了。

3、使用ZXing生成二維碼
下面針對二維碼生成和解析做個簡單介紹,至於詳細的使用方法,建議大家還是自己看看源碼,使用起來很簡單,不過這個開源項目的代碼,值得好好看看。首先給出二維碼生成的方法:
View Code
上面就是二維碼生成的方法介面,如果你只是使用者方法,很簡單,只要傳入一個URL即可,就像我截圖裡面一樣,傳入一個合法的網址即可。或者像現在一些移動APP的推廣,把APP下載地址轉為二維碼,只要掃一下就可以下載相應的APP。這個也是目前比較流行的APP的推廣方式。
上面代碼做的事情不多,主要是調用ZXing庫裡面QRCodeWriter().encode的方法對我們傳進去的URL進行編碼,具體如何編碼,這個我這里就不詳細說,有興趣可以看ZXing的源碼。文章最後會給出ZXing的源碼和例子代碼。

4、掃描二維碼獲取信息
掃描獲取二維碼信息的工作稍微復雜一些,主要是需要編寫Camera的使用,這個跟我們一般使用Camera一樣,需要使用Surfaceview作為預覽,這一部我這里就不說了,這個應該不是太復雜。對於使用過Camera做預覽的朋友,應該是挺簡單的事情。獲取二維碼數據的關鍵處理是在Camera的自動對焦回調函數哪裡,調用ZXing的解碼介面。
View Code
這里稍微多說一句,由於解碼需要一定時間,所以ZXing的解碼調用,都是使用了Handler作為線程通信機制,解碼的工作都是放在獨立線程裡面使用的,如果你直接在主線程解碼,恐怕ANR問題是避免不了。
View Code
上面是解碼的線程處理不同狀態的時候需要注意的地方,我們這里只看獲取圖像成功的地方,成功獲取圖片解碼的實在DecodeThread裡面實現,DecodeThread裡面解碼成功後,會把數據序列化,然後保存到Bundle裡面,我們可以直接通過Bundle的序列化,獲取到圖片數據。同時會把解碼後的結果保存到MSG裡面,然後就可以根據實際情況進行處理,例如上面代碼,解碼成功後,會調用一個處理函數:
View Code
上面就是整個二維碼的解碼流程,裡面因為涉及很多Camera的使用,所以你如果需要使用二維碼識別,需要注意一下你的程序需要申請下面的許可權,一般的Camera使用以及Camera的自動對焦等。
View Code
5、結語
上面就是生成和識別二維碼的關鍵流程和代碼,有興趣的朋友可以自己查看ZXing的源碼,裡面有很多圖像分析的知識可以學習。具體使用也可以參考我下面給出的Demo。二維碼對於現在移動開發來說很是很常用的技術,所以有空可以了解一下,說不定什麼時候就用上了。另外,ZXing庫除了二維碼外,其實對於條形碼也是支持的,只是我這里沒有介紹。有需要的自己去看看源碼即可。
轉載

G. 怎麼看JAVA開源項目的源碼

https://github.com/zxing/zxing
這上面都是源碼 github上的
但是初學java的話 看這個沒什麼用啊 因為要弄懂原理的話還要學tcp xml還有安卓編程的相關知識

H. Android ZXing 二維碼,編碼和解碼的演算法是什麼演算法,還是用bitmap生成二維碼圖片那個演算法是什麼,謝謝

二維碼分兩類:行排式二維條碼和矩陣式二維碼,已矩陣式二維碼中QRcode為例。
QRcode是日本Denso公司開發的,目前網上有其二維碼信息組件QRcode.dll,該組件可對輸入的字元串進行QR編碼
調用介面定義:
STDMETHOD
IMPCQREncoder:Encode(BSTR bstrEncodeData,
BYTE byErrorCorrectionLevel,
BOOL bISOI2EC,
BSTR *pbstrResultStream)
輸入參數說明:
BSTR bstrEncodeData: 待編碼的字元串,注意一個中文字元對應兩個位元組,對應漢字內碼
BYTE byErrorCorrectionLevel:編碼的糾錯級別選擇,0表示糾錯級別L(7%),1表示糾錯級別M(15%),2表示糾錯級別Q(25%),3表示糾錯級別H(30%)
BOOL bISOIEC:採用的編碼標准,取值為TRUE表示採用國際標准(ISO/IEC18004),FALSE表示采國家標准(GB/TGB/T18284-2000)
輸出參數說明:
BSTR *pbstrResultStream:輸出字元串,字元串由三部分組成,(注意,每個字元為一個位元組)
第一部分三位元組,為編碼後QR符號的寬度,
第二部分三位元組,為編碼後QR符號的高度,
第三部分為編碼後的QR符號,長度為QR符號寬度與QR符號高度的乘積。
舉個例子,對字元串「01234567」
編碼後得到返回值為:
「011011111111101001100100010」
字元串「01234567」經二維碼信息編碼後應理解為:
21個單位寬(前三個字元『021』)、21個單位高的正方形單位矩陣,
可以根據矩陣中的每一個元素值(0或1)來生成二維碼圖片對應位置上的像素顏色,假設定0值為白色,1值為黑色,每個單位(即021後面的字元)表示1個像素,那麼當前二維碼圖片應為21像素寬、21像素高的黑白相間的圖片。我想用編碼後的信息,以這種定義生成圖片的演算法應該還是容易實現的。另外,QR編碼具體演算法,建議還是看看QR編碼規範文檔,如果你需要,我可以傳給你。

I. zxing 二維碼消耗內存太大,項目容易崩潰,怎麼解決

zxing不會吧,你把掃描框調整一下,不要這么大

這個就是設置掃描框的常量

/**
*he
*barcode.
*.
*
*@.
*/
publicRectgetFramingRect(){
PointscreenResolution=configManager.getScreenResolution();
if(framingRect==null){
if(camera==null){
returnnull;
}
intwidth=(int)(screenResolution.x*4/5);
if(width<MIN_FRAME_WIDTH){
width=MIN_FRAME_WIDTH;
}

intheight=(int)(screenResolution.y/1.5);
intleftOffset=(screenResolution.x-width)/2;
inttopOffset=(screenResolution.y-height)/2;
framingRect=newRect(leftOffset,topOffset,width+leftOffset,width+leftOffset);
Log.d(TAG,"Calculatedframingrect:"+framingRect);
}
returnframingRect;
}


這是我的zxing掃描源碼

J. zxing生成的二維碼怎麼會出現灰色小方框

ZXing是一個開放源碼的,用Java實現的多種格式的1D/2D條碼圖像處理庫,它包含了聯繫到其他語言的埠。Zxing可以實現使用手機的內置的攝像頭完成條形碼的掃描及解碼。
對於你說的出現灰色小方框是正常的,你可以在設置上進行更換其他的內容!!

熱點內容
網分腳本 發布:2024-11-19 02:24:39 瀏覽:697
陌陌加密 發布:2024-11-19 02:24:32 瀏覽:670
oracle刪除資料庫表 發布:2024-11-19 02:23:05 瀏覽:117
玩家國度手機rog5選什麼配置 發布:2024-11-19 02:22:17 瀏覽:340
python文庫 發布:2024-11-19 02:21:32 瀏覽:374
安卓版錢咖怎麼樣 發布:2024-11-19 02:20:14 瀏覽:327
php驗證碼實例 發布:2024-11-19 02:20:12 瀏覽:538
天龍挖礦腳本 發布:2024-11-19 02:12:19 瀏覽:23
s71200程序編譯二進制文件 發布:2024-11-19 02:06:22 瀏覽:768
網路文件夾映射 發布:2024-11-19 02:04:55 瀏覽:235