当前位置:首页 » 操作系统 » zxing源码c

zxing源码c

发布时间: 2022-11-04 01:29:29

‘壹’ 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引用到项目中,就可以在需要的地方使用了。

热点内容
C语言a35a4a5 发布:2025-05-14 11:53:48 浏览:812
android隐藏item 发布:2025-05-14 11:43:56 浏览:327
javawebeclipse编译 发布:2025-05-14 11:35:24 浏览:937
可编程控制器试题 发布:2025-05-14 11:25:32 浏览:121
dsp混合编程 发布:2025-05-14 11:23:10 浏览:250
mysql添加存储过程 发布:2025-05-14 11:23:01 浏览:881
房车旅游自媒体有脚本吗 发布:2025-05-14 11:18:18 浏览:127
android输入法键盘 发布:2025-05-14 11:15:48 浏览:660
谷歌商店安卓手机在哪里 发布:2025-05-14 11:13:46 浏览:537
编程猫销售女 发布:2025-05-14 11:13:36 浏览:337