quirc 应用(转)

quirc库的使用:
该库的所有功能都通过单个头文件公开,其中应包括:#include <quirc.h>

要解码图像,您需要实例化一个struct quirc对象,这是通过quirc_new函数完成的。以后,当您不再需要解码任何内容时,应使用以下命令释放分配的内存quirc_destroy:
	struct quirc *qr;

	qr = quirc_new();
	if (!qr) {
			perror("Failed to allocate memory");
			abort();
	}

	/* ... */

	quirc_destroy(qr);
	
获取解码器对象后,您需要设置将要使用的图像大小,可使用quirc_resize以下方法完成:
	if (quirc_resize(qr, 640, 480) < 0) {
		perror("Failed to allocate video memory");
		abort();
	}
quirc_resize并且quirc_new是唯一的库函数,其分配内存。如果您打算处理一系列帧(或视频流),则可能要分配单个解码器并确定其大小,并保留该解码器以处理每个帧。
	
处理框架分为两个阶段。第一阶段是称为识别的图像识别阶段,该阶段会拍摄灰度图像并搜索QR码。使用quirc_begin和quirc_end,您可以将灰度图像直接送入quirc用于图像处理的缓冲区中:
	uint8_t *image;
	int w, h;

	image = quirc_begin(qr, &w, &h);

	/* Fill out the image buffer here.
	 * image is a pointer to a w*h bytes.
	 * One byte per pixel, w pixels per line, h lines in the buffer.
	 */

	quirc_end(qr);
	
注意,quirc_begin仅返回指向先前分配的缓冲区的指针。缓冲区将包含未初始化的数据。呼叫至后quirc_end,解码器会保存一个可通过quirc_count和查询的QR码列表quirc_extract。
	
此时,处理的第二阶段发生-解码。这是通过调用来完成的,该调用quirc_decode与解码器对象无关。

	int num_codes;
	int i;

	/* We've previously fed an image to the decoder via
	 * quirc_begin/quirc_end.
	 */

	num_codes = quirc_count(qr);
	for (i = 0; i < num_codes; i++) {
			struct quirc_code code;
			struct quirc_data data;
			quirc_decode_error_t err;

			quirc_extract(qr, i, &code);

			/* Decoding stage */
			err = quirc_decode(&code, &data);
			if (err)
					printf("DECODE FAILED: %s\n", quirc_strerror(err));
			else
					printf("Data: %s\n", data.payload);
	}
quirc_code并且quirc_data是扁平结构,使用后无需初始化或释放。		
版权所有(C)2010-2012 Daniel Beer < dlbeer@gmail.com >
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值