STM32可用的QRCODE二维码生成库

近期的一个项目中要用到qrcode来传送一些讯息,因此跑去找了下方法顺便问问其他人,大多数都是PY或者java的类库,c语言少得可怜。


最后找到了这个库,在github上开源发布:https://github.com/fukuchi/libqrencode


它的作者设计用在LINUX上面。是作为可执行文件来运转并产生二维码的,因此试着缩减了一些不用的功能,减去主函数以及因为系统不同可能会出错的部分,使得在我的keil5上可以正常的运行并且正常产生二维码像素矩阵显示在屏幕上,这一块缩减后的文件我上传到了CSDN文件库   http://download.csdn.net/detail/u012388993/9848757


如何使用:


我所使用到的API只有一个 QRcode *QRcode_encodeString(const char *string, int version, QRecLevel level, QRencodeMode hint, int casesensitive),这个函数接收字符串并输出QRcode结构体(库定义的),QRcode结构体包括了二维码版本,二维码宽度(长宽一致)以及矩阵数据,关于版本(version)这一参数,库里面的解释是符号的版本,版本越高则二维码可存储的讯息越庞大也具有越高的信息量,绘制出的像素更多也更复杂。最高可以设置到40,我在这里只设置3-5,已经足够存储几十个字符并识别。

QRecLevel是一个容错率高低的设定参数,分别代表:


  1. L(Low):7%的字码可被修正
  2. M(Medium):15%的字码可被修正
  3. Q(Quartile):25%的字码可被修正
  4. H(High):30%的字码可被修正

随后还有QR编码模式的选择,这里要注意的是有些编码并不是所有软件都可以识别,例如8位数据方式编码我试了下只有腾讯产品能够认出(当然这也应该足够了)。


二维码的背景是白色,如果说是在单色屏幕上面显示,那么只要在有黑色的情况下(矩阵数据位为1)绘制点即可。


贴一个示例程序用于参考。使用了一个GUI框架


qrcode = QRcode_encodeString((const char *)data, 3, QR_ECLEVEL_L, QR_MODE_8, 1);
	if(qrcode != NULL)
	{
	GUI_SetColor(GUI_WHITE);
	GUI_FillRect(x-2,y-2,x+9+ qrcode->width * m_EXPAND_DOT,y+9+ qrcode->width * m_EXPAND_DOT);
		for(i = 0; i < qrcode->width; i++)
		{
			for(j = 0; j < qrcode->width; j++)
			{
				if(qrcode->data[i*qrcode->width + j] & 0x01)
				{
					for(a = 0; a < m_EXPAND_DOT; a++)
					{
						for(b = 0; b < m_EXPAND_DOT; b++)
						{
							GUI_SetColor(GUI_BLACK);
							GUI_DrawPixel(x+m_EXPAND_DOT*i+a+m_OFFSET_VALUE,y+m_EXPAND_DOT*j+b+m_OFFSET_VALUE);//no proportion
							
						}
					}
				}
				else
				{
					for(a = 0; a < m_EXPAND_DOT; a++)
					{
						for(b = 0; b < m_EXPAND_DOT; b++)
						{
						
							GUI_SetColor(GUI_WHITE);
					//		GUI_DrawPixel(x+m_EXPAND_DOT*i+a+m_OFFSET_VALUE,y+m_EXPAND_DOT*j+b+m_OFFSET_VALUE);//no proportion
						
						}
					}
				}
			}
		}
	}
	QRcode_free(qrcode);


STM32可用的QRCODE二维码生成库_第1张图片



参考:http://www.cnblogs.com/sddai/p/5675041.html

你可能感兴趣的:(STM32)