ZBar的简单使用

步博厚
2023-12-01
NSRunLoop类声明的编程接口用于管理输入源对象。一个NSRunLoop对象处理像来自窗体系统中的鼠标和键盘事件,NSPORT对象和NSConnection连接对象这类的输入源。一个NSRunLoop对象也处理的NSTimer事件。


你的应用程序不能建立或明白管理NSRunLoop对象。

每一个NSThread对象。包含应用程序的主线程。具有依据须要自己主动创建一个NSRunLoop对象。假设你须要訪问当前线程的执行循环,能够使用类方法currentRunLoop。


1.下载ZBar的第三方库。加入入project

2.加入相关库
   AVFoundation.framework
   CoreMedia.framework
   CoreVideo.framework
   libiconv.2.4.0.dylib  

3.添加一个以ZBarReaderViewController为父类的控制器并实现ZBarReaderDelegate代理

4.在控制器中加入例如以下代码

条形码的扫描
- (void)viewDidLoad
{
    [
super viewDidLoad];
    
//设置代理
    
self.readerDelegate = self;
    
//扫瞄图像
    
ZBarImageScanner *mScanner = self.scanner;
    
//是否显示绿色的追踪框。注意。即当选择yes的时候。这个框只当扫瞄EANI2/5的时候才可见。


    
self . tracksSymbols  =  YES ;
    
// 是否使用备用控制组
    
self . showsZBarControls  =  YES ;
    
// 支持的方向。用 ZBarOrientationMask()   ZBarOrientationMaskAll
    
self . supportedOrientationsMask  =  ZBarOrientationMask ( UIInterfaceOrientationMaskPortrait );
    
    
// 提供自己定义覆盖层。注意,在 showsZBarControls 启用的情况下才干够用
    
UIView  *view = [[ UIView   alloc initWithFrame : self . view . bounds ];
    view.
backgroundColor  = [ UIColor   grayColor ];
    
self . cameraOverlayView  = view;
    
    
// 裁剪扫描的图像,在扫描前图像将被裁剪到这个矩形内。这个矩形框是将图像的尺寸和宽高比标准化,
    
// 有效值将放置矩形内介于 0 1 的每一个轴。当中 x 轴相应于图像的长轴。默觉得完整的图像( 0 0 1 1 )。


//    self.scanCrop
    
// 调节以适应预览图片
//    self.cameraViewTransform
      //解码配置
    [mScanner 
setSymbology : ZBAR_I25
                   
config : ZBAR_CFG_ENABLE
                       
to : 0 ];
// Do any additional setup after loading the view.
}

- (
void )viewDidAppear:( BOOL )animated
{
    [
super   viewDidAppear :animated];
    [
self . readerView   start ];
}

- (
void )viewWillDisappear:( BOOL )animated
{
    [
super   viewWillDisappear :animated];
    [
self . readerView   stop ];
}

- (
void )imagePickerController:( UIImagePickerController  *)picker didFinishPickingMediaWithInfo:( NSDictionary  *)info
{
    
// 获取扫瞄结果
    
id < NSFastEnumeration > results = [info  objectForKey : ZBarReaderControllerResults ];
    
ZBarSymbol  *symbol =  nil ;
      //不过抓住第一个条形码
    
for  (symbol  in  results)
        
break ;
    
NSString  *text = symbol. data ;
        
// 解决中文乱码问题
    
if  ([text  canBeConvertedToEncoding : NSShiftJISStringEncoding ]) {
        text = [
NSString   stringWithCString :[text  cStringUsingEncoding : NSShiftJISStringEncoding encoding : NSUTF8StringEncoding ];
    }
    
NSDictionary  *dic = [[ NSDictionary   alloc initWithObjectsAndKeys :[ NSString   stringWithFormat : @"%@" ,text], @"resultLabel" ,[info  objectForKey : UIImagePickerControllerOriginalImage ], @"resultImgView" nil ];
    [
self   performSelectorOnMainThread : @selector (mainAction:)  withObject :dic  waitUntilDone : NO ];
}

- (void)mainAction:(NSDictionary *)dic
{
    
OtherViewController *other = [[OtherViewController allocinit];
    other.
resultString = [dic objectForKey:@"resultLabel"];
    other.
image = [dic objectForKey:@"resultImgView"];
    [
self.navigationController pushViewController:other animated:YES];
}


此时,我们再来看看ZBarReaderViewController中的ZBarReaderView这个类
// supply a pre-configured image scanner.
//支持一个预先准备的图片扫描
- (
id) initWithImageScanner: (ZBarImageScanner*) imageScanner;

// start the video stream and barcode reader.
//開始视频流和条形码扫描
- (
void) start;

// stop the video stream and barcode reader.
//停止视频流和条形码扫描
- (
void) stop;

// clear the internal result cache
//清理内部的缓存
- (
void) flushCache;

// compensate for device/camera/interface orientation
// 适应设备的方向
- (
void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) orient
                                 duration: (NSTimeInterval) duration;

// delegate is notified of decode results.
//代理
@property (nonatomicassignid<ZBarReaderViewDelegate> readerDelegate;

// access to image scanner for configuration.
//直接对图片扫描配置
@property (nonatomicreadonlyZBarImageScanner *scanner;

// whether to display the tracking annotation for uncertain barcodes
// (default YES).
// 是否为不确定的条形码显示追踪
@property (nonatomicBOOL tracksSymbols;

// color of the tracking box (default green)
//追踪框的颜色,默觉得绿色
@property (nonatomicretainUIColor *trackingColor;

// enable pinch gesture recognition for zooming the preview/decode
// (default YES).
// 能否对预览图进行手势缩放,默认是能够的
@property (nonatomicBOOL allowsPinchZoom;

// torch mode to set automatically (default Auto).
// 0为不闪光。1为闪光
@property (nonatomicNSInteger torchMode;

// zoom scale factor applied to video preview *and* scanCrop.
// also updated by pinch-zoom gesture.  clipped to range [1,maxZoom],
// defaults to 1.25
// 施加于摄像前景画面和扫描区域的缩放
@property (nonatomicCGFloat zoom;
- (
void) setZoom: (CGFloat) zoom
        animated: (BOOL) animated;

// the region of the image that will be scanned.  normalized coordinates.
// 图片将被扫描的区域,标准坐标
@property (nonatomicCGRect scanCrop;

二维码的扫描

实现代理ZBarReaderViewDelegate

- (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
    
ZBarSymbol *symbol = nil;
    
for (symbol in symbols)
        
break;
    
NSString *text = symbol.data;
    
NSLog(@"%@",text);
}

转载于:https://www.cnblogs.com/xfgnongmin/p/10664051.html

 类似资料: