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加载失败问题(附源码)