zxing源碼c
『壹』 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源碼結構如下:
『貳』 有誰知道用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代碼。
『叄』 怎麼在Windows環境下編譯zxing的cpp源碼
c語言二維條形碼解析庫 libqrencode ,也是開源的。
libqrencode 是一個用C語言編寫的用來解析二維條形碼(QR Code)的程序庫,libqrencode通過手機的CCD攝像頭來掃描二維條形碼。
~如果你認可我的回答,請及時點擊【採納為滿意回答】按鈕
~~手機提問的朋友在客戶端右上角評價點【滿意】即可。
~你的採納是我前進的動力
『肆』 如何在iOS中使用ZXing庫
ZXing(Github鏡像地址)是一個開源的條碼生成和掃描庫(開源協議為Apache2.0)。它不但支持眾多的條碼格式,而且有各種語言的實現版本,它支持的語言包括:java, C++, C#, Objective-C, ActionScript和Ruby。
我上周在iOS項目開發中使用了ZXing的掃描二維碼功能。在此總結一下如何將ZXing集成到已有的iOS工程中,分享給大家。
集成步驟
首先去Google Code或Github將ZXing的代碼下載下來,整個工程比較大,我們只需要其中涉及iOS的部分,所以最好做一些裁剪。簡單來說,我們只需要保留cpp和iphone這2個文件夾,其餘的全部刪掉。如下圖所示:
接著我們繼續裁剪,對於cpp這個目錄,只保留cpp/core/src/zxing下面的內容,其餘內容也可以刪掉了。但是整個目錄結構必須保持原樣。裁剪完後,整個目錄結構如下所示:
接下來,我們把裁剪後的zxing目錄整個移動到我們的iOS項目的目錄下,並且把上圖中可以看到的ZXingWidget.xcodeproj文件拖動到我們的iOS工程中。
下一步,我們需要設置ZXing項目和我們原本的iOS項目之間的依賴關系。在我們的iOS項目的設置中,點擊build phases tab,然後增加 Target Dependencies 和 Link binary,並且增加這些framework依賴:
a. AVFoundation b. AudioToolbox c. CoreVideo d. CoreMedia e. libiconv f. AddressBook g. AddressBookUI
完成之後如下圖所示:
最後一步,在設置中增加如下2個header search path:
./zxing/iphone/ZXingWidget/Classes
./zxing/cpp/core/src
需要注意的是,第一個path要設置成循環查找子目錄,而第二個不循環查找,如下圖所示:
恭喜你,完成這步之後,你就已經完成ZXing庫的集成了。下面談談如何使用ZXing庫來做二維碼識別。
二維碼識別
ZXing的iOS版本提供2種方法來做二維碼識別功能,第一種方法比較簡單,第二種方法比較復雜。我在做Demo時使用了第一種方法,做真正項目開發的時候使用了第二種方法,所以都給大家介紹一下。
使用方法一
ZXing直接提供了一個掃描二維碼的View Controller,即ZXingWidgetController。在需要使用的界面代碼中,加入文件依賴:
12
#import #import
然後在需要掃描的時候,調用如下代碼即可:
1234567891011
- (IBAction)scanPressed:(id)sender { ZXingWidgetController *widController =[[ZXingWidgetController alloc] initWithDelegate:self showCancel:YESOneDMode:NO]; NSMutableSet *readers = [[NSMutableSet alloc ] init];QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init]; [readersaddObject:qrcodeReader]; [qrcodeReader release]; widController.readers =readers; [readers release]; [self presentModalViewController:widControlleranimated:YES]; [widController release]; }
在ZXing掃描有結果時,會調用如下回調函數:
1234
@protocol ZXingDelegate - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result; -(void)zxingControllerDidCancel:(ZXingWidgetController*)controller; @end
使用方法二
方法二與方法一的區別就相當於AVFoundation和UIImagePickerController的區別一樣。簡單來說,就是使用方法二比方法一更加麻煩,但是獲得的可定製性更高。
使用方法二時,你需要自己用AVFoundation獲得Camera返回的實時圖象,然後轉成UIImage,最後傳給ZXing的Decoder類完成二維碼的識別。由於使用AVFoundation涉及的代碼略多,我寫的示意代碼如下:
#import "Decoder.h" #import "TwoDDecoderResult.h" #import "QRCodeReader.h" -(void)viewDidLoad { // setup QR reader self.qrReader = [[NSMutableSet alloc ]init]; QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];[self.qrReader addObject:qrcodeReader]; self.scanningQR = NO; self.step =STEP_QR; } // AVFoundation的回調函數 - (void)captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBufferfromConnection:(AVCaptureConnection *)connection { // 第一步,將sampleBuffer轉成UIImage UIImage *image= [self getCaptureImage:sampleBuffer]; // 第二步,用Decoder識別圖象 Decoder *d = [[Decoder alloc] init]; d.readers = self.qrReader;d.delegate = self; self.scanningQR = [d decodeImage:image] == YES ? NO : YES;}
ZXing的Decoder類提供了以下回調函數獲得識別結果:
12345678910
@protocol DecoderDelegate<</span>NSObject> @optional - (void)decoder:(Decoder *)decoder willDecodeImage:(UIImage *)image usingSubset:(UIImage*)subset; - (void)decoder:(Decoder *)decoder didDecodeImage:(UIImage*)image usingSubset:(UIImage *)subset withResult:(TwoDDecoderResult*)result { NSLog(@"result = %@", [result text]); } - (void)decoder:(Decoder*)decoder failedToDecodeImage:(UIImage *)image usingSubset:(UIImage*)subset reason:(NSString *)reason; - (void)decoder:(Decoder *):(CGPoint)point; @end
Trouble Shoot & Tips
我在使用中遇到了一些問題,主要是編譯的問題。
一個是找不到
頭文件。解決方法:把用到ZXing的源文件擴展名由.m改成.mm。
報錯:Undefined symbols for architecture armv7s,解決方法:把ZXingWidget的一個build target參數:」Build Active Architecture Only」 修改成 「NO」.
報錯:No such file or directory,出現該錯誤可能是你的Header Search Path寫錯了,或者就是你的zxing庫的目錄結構不是我上面強調的,好好檢查一下吧。
如果你需要生成二維碼做測試,推薦一個不錯的在線生成二維碼的網站:http://cli.im/
ZXing和OpenCV的兼容問題
ZXing 2.1 和OpenCV 2.4.3的iOS庫有一些兼容問題,他們對C++標准庫的版本和編譯器版本都有一些需求,造成滿足一方了,另一方就編譯不通過了。Stackoverflow上有人終於找到了一個讓它們和平共處的方法,但是只適用於iOS5.0以上版本。正好我們的App只支持iOS5.0+,所以就搞定了。
『伍』 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掃描源碼
『陸』 如何用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>
『柒』 如何在visual studio下編譯zxing cpp,以及zxing c++的使用
.cpp是c++(即c plus plus)文件類型,比c語言較高級的編程語言。可以用Microsoft Visual Studio來打開。
1、把原程序寫好後進行編譯操作Compile(在Visual C++里的快捷鍵是Ctrl+F7)就能生成「目標文件」即.obj文件,
2、再進行建立連接操作Build(F7)就是對.obj進行建立連接
3、生成了「可執行文件」即.exe文件
4、執行文件查看結果是Excute快捷鍵Ctrl+F5
『捌』 C# 用ZXING 的 ean13 生成條碼圖片時能否生成:常見的條碼格式,像軟體EAN Bar.Code.2.5生成(EAN1 3 C)
就差數字的話,自己畫就可以了
Graphics類
研究確定什麼X坐標,Y坐標可以寫,然後就是寫什麼數字的小問題了
當然如果要對齊條形碼等等,就是進一步確定每個數字的條形碼區域了
『玖』 如何在iOS中使用ZXing庫
ZXing(Github鏡像址)源條碼掃描庫(源協議Apache2.0)支持眾條碼格式且各種語言實現版本支持語言包括:Java、 C++、 C#、 Objective-C、ActionScript及Ruby
我前iOS項目發使用ZXing掃描二維碼功能總結何ZXing集已iOS工程享給家
集步驟
首先Google Code或GithubZXing代碼載整工程比較我需要其涉及iOS部所做些裁剪簡單說我需要保留cppiphone2文件夾其餘全部刪掉
接著我繼續裁剪於cpp目錄保留cpp/core/src/zxing面內容其餘內容刪掉整目錄結構必須保持原裁剪完整目錄結構所示:
接我裁剪zxing目錄整移我iOS項目目錄並且圖看ZXingWidget.xcodeproj文件拖我iOS工程
步我需要設置ZXing項目我原本iOS項目間依賴關系我iOS項目設置點擊build phases tab增加 Target Dependencies Link binary並且增加些framework依賴:
a. AVFoundation
b. AudioToolbox
c. CoreVideo
d. CoreMedia
e. libiconv
f. AddressBook
g. AddressBookUI
完圖所示:
步設置增加2header search path:
./zxing/iphone/ZXingWidget/Classes
./zxing/cpp/core/src
需要注意第path要設置循環查找目錄第二循環查找圖所示:
恭喜完步已經完ZXing庫集面談談何使用ZXing庫做二維碼識別
二維碼識別
ZXingiOS版本提供2種做二維碼識別功能第種比較簡單第二種比較復雜我做Demo使用第種做真項目發候使用第二種所都給家介紹
使用
ZXing直接提供掃描二維碼View Controller即ZXingWidgetController需要使用界面代碼加入文件依賴:
1 #import
2 #import
需要掃描候調用代碼即:
1 - (IBAction)scanPressed:(id)sender {
2 ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];
3 NSMutableSet *readers = [[NSMutableSet alloc ] init];
4 QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
5 [readers addObject:qrcodeReader];
6 [qrcodeReader release];
7 widController.readers = readers;
8 [readers release];
9 [self presentModalViewController:widController animated:YES];
10 [widController release];
11 }
ZXing掃描結調用調函數:
1 @protocol ZXingDelegate
2 - (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result;
3 - (void)zxingControllerDidCancel:(ZXingWidgetController*)controller;
4 @end
使用二
二與區別相於區別簡單說使用二比更加麻煩獲定製性更高
使用二需要自用AVFoundation獲Camera返實圖象轉UIImage傳給ZXingDecoder類完二維碼識別由於使用AVFoundation涉及代碼略我寫示意代碼:
1 #import "Decoder.h"
2 #import "TwoDDecoderResult.h"
3 #import "QRCodeReader.h"
4
5 - (void)viewDidLoad {
6 // setup QR reader
7 self.qrReader = [[NSMutableSet alloc ] init];
8 QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
9 [self.qrReader addObject:qrcodeReader];
10 self.scanningQR = NO;
11 self.step = STEP_QR;
12 }
13
14 // AVFoundation調函數
15 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
16 // 第步sampleBuffer轉UIImage
17 UIImage *image= [self getCaptureImage:sampleBuffer];
18 // 第二步用Decoder識別圖象
19 Decoder *d = [[Decoder alloc] init];
20 d.readers = self.qrReader;
21 d.delegate = self;
22 self.scanningQR = [d decodeImage:image] == YES ? NO : YES;
23 }
ZXingDecoder類提供調函數獲識別結:
1 @protocol DecoderDelegate
2 @optional
3 - (void)decoder:(Decoder *)decoder willDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset;
4 - (void)decoder:(Decoder *)decoder didDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset withResult:(TwoDDecoderResult *)result {
5 NSLog(@"result = %@", [result text]);
6 }
7 - (void)decoder:(Decoder *)decoder failedToDecodeImage:(UIImage *)image usingSubset:(UIImage *)subset reason:(NSString *)reason;
8 - (void)decoder:(Decoder *)decoder foundPossibleResultPoint:(CGPoint)point;
9
10 @end
Trouble Shoot & Tips
『拾』 如何使用ZXing C#埠
到谷歌code下載相應的代碼 找到其中的CSharp文件夾,在vs中打開並編譯,將obj下debug中的zxing.dll復制並粘帖到你的項目中的bin文件目錄下,右擊添加項目引用。 將zxing.dll引用到項目中,就可以在需要的地方使用了。