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 >


