VC++使用libqr开源库生成二维码(附源码)

Posted dvlinker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC++使用libqr开源库生成二维码(附源码)相关的知识,希望对你有一定的参考价值。

      日常生活中到处都有二维码的身影,比如说扫码支付、扫码加好友、扫码查询信息等等。几乎所有的手机APP都支持生成二维码和扫二维码,我们PC端的程序有时也需要支持。为了方便用户的使用,程序生成二维码,用户只需要扫二维码就能打开对应页面,不再需要进行一些复杂的操作。今天我们就来讲述一下如何使用libqr库来生成二维码。

1、libqr开源库介绍

       libqr是github上开源的二维码生成库,其github地址为:https://github.com/rsky/qrcode。使用c语言编写,提供了标准的C接口,API使用起来很方便,该库可以输出bitmap和png两种图片格式的二维码。

      开源库的作者是一位来自日本的程序员,开源库的头文件中的注释都是使用日语写的,如果要看注释,可以尝试用翻译软件去翻译一下。

2、使用libqr的一般流程

      使用libqr库生成二维码图片的一般步骤:

1)调用qrInit接口,初始化二维码库;

2)调用qrAddData接口,将要转换成二维码的信息添加到库中;

3)调用qrFinalize接口,发起对二维码的转换;

4)调用qrSymbolToPNG接口,生成二维码图片,qrSymbolToPNG接口会返回图片文件数据buffer;

5)将qrSymbolToPNG返回的图片文件数据保存到文件中,然后显示到UI界面上。

3、代码展示

       调用libqr库接口生成二维码的详细代码如下:

BOOL CreateAndShowQrCode()

	int errcode = QR_ERR_NONE;
	// 1、初始化libqr库
	// qrInit接口的5个参数分别是version、mode、纠错等级、掩码和错误代码,使用过程
	// 中使用除了QR_EM_8BIT以外的mode会生成不正常的二维码,暂不知道原因。
	QRCode* p = qrInit(2, QR_EM_8BIT, 0, -1, &errcode);
	if ( p == NULL )
	
		return false;
	

	// 2、将要转换成二维码的信息添加到库中
	string strData = "https://www.163.com/";
	qrAddData( p, (const qr_byte_t*)strData.data(), strData.length() );
	
	// 3、发起对二维码的转换
	if (!qrFinalize(p))
	
		return false;
	

	// 4、生成到png图片数据
	int size = 0;
	// 两个2分别表示像素之间的距离和二维码图片的放大倍数,范围都是1-16
	qr_byte_t * cBuf = qrSymbolToPNG(p, 2, 2, &size);
	if (cBuf == NULL)
	
		return false;
	

	// 5、将png数据保存到文件中
	CString strPath = _T("D:\\\\qrcode.png");
	HANDLE hFile;
	DWORD dwreturnsize;
	hFile = ::CreateFile(strPath, FILE_ALL_ACCESS, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
	::WriteFile(hFile, cBuf, size, &dwreturnsize, NULL);
	::CloseHandle(hFile);

	// 6、将png图片绘制到UI界面上
	HBITMAP hBitmap = NULL;
	Bitmap btm(strPath);
	// 二维码图片显示的宽度和高度
	int w,h;
	w=h=58;
	if( Gdiplus::Ok == btm.GetHBITMAP(NULL,&hBitmap) )
	
		CUIString strName = _T("QR_CODE");
		// m_pQrCode为UI界面上显示二维码的控件
		if( m_pQrCode )
		
			m_pm.RemoveImage(strName);
			m_pm.AddImage(strName, hBitmap,w,h,false);
			m_pQrCode->SetBkImage(strName);
		
	

	m_pQrCode->SetBkImage(m_strPath);

	return true;

4、下载libqr库的头文件与库文件

      如果需要使用libqr开源库去生成二维码,可以到下列地址中去下载编译好的libqr开源库的头文件和库文件:

链接:https://pan.baidu.com/s/1MRVMLz-qb4LU6bofldYJlQ 
提取码:7wlt

以上是关于VC++使用libqr开源库生成二维码(附源码)的主要内容,如果未能解决你的问题,请参考以下文章

C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码

VC++使用zlib压缩及解压数据,使用base64编码及解码数据(附源码)

VC++如何使用C++ STL标准模板库中的算法函数(附源码)

VC++通过查看ReactOS开源代码,解决完整路径dll加载失败问题(附源码)

VC++使用开源的zip.cpp和unzip.cpp实现压缩包的创建与解压(附源码)

VC++ 解决dll库动态库加载失败问题(调用LoadLibrary加载失败)(附源码)