iOS ZBar扫码简单实现

导入ZBarSDK文件并引入一下框架
AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
QuartzCore.framework
libiconv.dylib
引入头文件#import “ZBarSDK.h”即可使用
当找到条形码时,会执行代理方法
废话不多说,直接上代码
//
// LQXZBarViewController.m
// erweim
//
// Created by 刘祺旭 on 15/9/9.
// Copyright (c) 2015年 刘祺旭. All rights reserved.
//

import "LQXZBarViewController.h"

@interface LQXZBarViewController ()
{
BOOL is_Anmotion;
ZBarReaderViewlqxreadview;
UIImageView
lqxscanZomeBack;
UIImageView*lqxreadLineView;
}
@end

@implementation LQXZBarViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    [self InitScan];
    [self loopDrawLine];
    }

    pragma mark 初始化扫描

  • (void)InitScan
    {
    lqxreadview = [ZBarReaderView new];
    lqxreadview.backgroundColor = [UIColor clearColor];
    lqxreadview.frame = CGRectMake(187.5 - 150, 333.5 - 150, 300, 300);
    lqxreadview.readerDelegate = self;
    lqxreadview.allowsPinchZoom = YES;//使用手势变焦
    lqxreadview.trackingColor = [UIColor redColor];
    lqxreadview.showsFPS = NO;// 显示帧率 YES 显示 NO 不显示
    lqxreadview.scanCrop = CGRectMake(50, 50, 50, 50);//将被扫描的图像的区域

    UIImage *hbImage=[UIImage imageNamed:@"框.png"];
    lqxscanZomeBack=[[UIImageView alloc] initWithImage:hbImage];
    //添加一个背景图片
    CGRect mImagerect=CGRectMake((lqxreadview.frame.size.width-200)/2.0, (lqxreadview.frame.size.height-200)/2.0, 200, 200);
    [lqxscanZomeBack setFrame:mImagerect];
    lqxreadview.scanCrop = [self getScanCrop:mImagerect readerViewBounds:lqxreadview.bounds];//将被扫描的图像的区域

    [lqxreadview addSubview:lqxscanZomeBack];
    [lqxreadview addSubview:lqxreadLineView];
    [self.view addSubview:lqxreadview];
    [lqxreadview start];

}

pragma mark 获取扫描区域

-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds
{
CGFloat x,y,width,height;

x = rect.origin.x / readerViewBounds.size.width;
y = rect.origin.y / readerViewBounds.size.height;
width = rect.size.width / readerViewBounds.size.width;
height = rect.size.height / readerViewBounds.size.height;

return CGRectMake(x, y, width, height);

}

pragma mark 扫描动画

-(void)loopDrawLine
{

CGRect  rect = CGRectMake(lqxscanZomeBack.frame.origin.x, lqxscanZomeBack.frame.origin.y, lqxscanZomeBack.frame.size.width, 2);
if (lqxreadLineView) {
    [lqxreadLineView removeFromSuperview];
}
lqxreadLineView = [[UIImageView alloc] initWithFrame:rect];
lqxreadLineView.backgroundColor = [UIColor redColor];
[lqxreadLineView setImage:[UIImage imageNamed:@"线.jpg"]];
[UIView animateWithDuration:3.0
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     //修改fream的代码写在这里
                     lqxreadLineView.frame =CGRectMake(lqxscanZomeBack.frame.origin.x, lqxscanZomeBack.frame.origin.y+lqxscanZomeBack.frame.size.height, lqxscanZomeBack.frame.size.width, 2);
                     [lqxreadLineView setAnimationRepeatCount:0];
                     
                 }
                 completion:^(BOOL finished){
                     if (!is_Anmotion) {
                     
                         [self loopDrawLine];
                     }
                     
                 }];

[lqxreadview addSubview:lqxreadLineView];

}

pragma mark 获取扫描结果

  • (void)readerView:(ZBarReaderView )readerView didReadSymbols:(ZBarSymbolSet )symbols fromImage:(UIImage )image
    {
    // 得到扫描的条码内容
    const zbar_symbol_t
    symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);
    NSString *symbolStr = [NSString stringWithUTF8String: zbar_symbol_get_data(symbol)];
    if (zbar_symbol_get_type(symbol) == ZBAR_QRCODE) {

      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:symbolStr]];

    }

    for (ZBarSymbol *symbol in symbols) {
    break;
    }

    [readerView stop];
    is_Anmotion = YES;
    [readerView removeFromSuperview];

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

/*

pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

  • (void)prepareForSegue:(UIStoryboardSegue )segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
    }
    /

@end

转载于:https://www.cnblogs.com/liuqixu/p/4795376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现C语言调用zbar实现二维码扫码,需要进行以下步骤: 1. 下载zbar的源码,并进行编译安装。 2. 在C程序中引用zbar的头文件,并链接zbar的库文件。 3. 使用zbar提供的API函数实现二维码扫码功能。 以下是一个简单的示例程序: ``` #include <stdio.h> #include <zbar.h> int main() { // 初始化zbar zbar_image_scanner_t *scanner = zbar_image_scanner_create(); zbar_image_scanner_set_config(scanner, 0, ZBAR_CFG_ENABLE, 1); // 读取二维码图片 zbar_image_t *image = zbar_image_create(); zbar_image_set_format(image, *(int*)"Y800"); // 设置图片格式为Y800 FILE *file = fopen("qrcode.jpg", "rb"); fseek(file, 0, SEEK_END); long size = ftell(file); fseek(file, 0, SEEK_SET); char *data = (char*)malloc(size); fread(data, 1, size, file); zbar_image_set_size(image, 640, 480); // 设置图片大小 zbar_image_set_data(image, data, size, zbar_image_free_data); // 扫描二维码 int n = zbar_scan_image(scanner, image); const zbar_symbol_t *symbol = zbar_image_first_symbol(image); for (; symbol; symbol = zbar_symbol_next(symbol)) { const char *data = zbar_symbol_get_data(symbol); printf("QR Code: %s\n", data); } // 释放资源 zbar_image_destroy(image); zbar_image_scanner_destroy(scanner); fclose(file); return 0; } ``` 在这个示例程序中,我们首先初始化了zbar,然后读取了一个名为qrcode.jpg的二维码图片,并设置了图片的格式和大小。接着,我们调用zbar_scan_image函数扫描二维码,并遍历所有扫描到的二维码进行输出。最后,我们释放了所有的资源。 需要注意的是,这个示例程序仅供参考,实际使用时可能需要进行一些修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值