windows C++生成二维码图片
windows C++生成二维码图片
二维码功能现在很常用,前端时间阶段一个项目需求,需要在我们的windows软件上集成扫码登录功能,二维码由windows端生成,实现原理是在windows上用duilib绘制窗口,之后将二维码图片以背景形式展示出来,在网上查了很多相关的代码,但是有的说的比较少,有的不全,在此,我整理了一下。
我是用vs2010编写的,就以vs2010为例
1.新建一个工程为控制台程序(这里不阐述了)
2.导入二维码生成库,在这里我用的是一个开源库QRcode.dll,QRcode.lib,以及对应的头文件qr.h,如果有兴趣可以去github下下载源代码编译,我在百度网盘上也放了,可以直接使用
3.在工程内导入库
右键工程->选择属性->选择输入->附加依赖项
4:编写代码:
// 二维码2.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <stdio.h>
#include <fstream>
#include "qr.h"
#include <string>
#include <windows.h>#include <stdlib.h>
#include <iostream>#include <cassert>using namespace std;int _tmain(int argc, _TCHAR* argv[])
{int errcode = QR_ERR_NONE;//qrInit的5个参数分别是version,mode,纠错等级和掩码,使用过程中使用除了QR_EM_8BIT以外的mode会生成不正常的二维码,暂时不知道原因。QRCode* p = qrInit(10, QR_EM_8BIT, 2, -1, &errcode);if (p == NULL){printf("error\n");return -1;}string strData = "eyJzZXJ2aWNlTm8iOiI1NjMyNjQ0NTQyMSJ9"; //二维码所保存的数据qrAddData(p, (const qr_byte_t*)strData.data(), strData.length());//注意需要调用qrFinalize函数if (!qrFinalize(p)){printf("finalize error\n");return -1;}int size = 0;//两个数值分别表示:像素之间的距离和二维码图片的放大倍数,范围都是1-16qr_byte_t * buffer = qrSymbolToBMP(p, 10, 4, &size);if (buffer == NULL){printf("error %s", qrGetErrorInfo(p));return -1;}ofstream f("qrcode.bmp");f.write((const char *)buffer, size);f.close();return 0;
}
之后编译调试就发现在工程路径下生成了qrcode.bmp
到这里二维码图片已经生成完成,但是我测试时候一直有问题,duilib绘制的窗口一直无法加载展示此图片,后来发现它生成的是位深度为1的图片
在控件中无法展示,需要把24位或者32位图片才可以正常展示出来,这个时候用到了FreeImage库来实现图片转换,引入FreeImage.dll,FreeImage.lib和头文件FreeImage.h
1,像导入二维码库一下导入FreeImage库
在cpp文件中添加头文件
#include"FreeImage.h"
2,只需在生成二维码图片下面添加如下代码即可完成转化
FreeImage_Initialise(TRUE);FIBITMAP * bmp = FreeImage_Load(FIF_BMP,"qrcode.bmp",BMP_DEFAULT);int bpp= FreeImage_GetBPP(bmp);FIBITMAP * bmp1 = FreeImage_ConvertTo24Bits(bmp);if( bmp1){FreeImage_Save(FIF_PNG, bmp1, "qrcode.png", PNG_DEFAULT);}FreeImage_Unload(bmp);FreeImage_Unload(bmp1);FreeImage_DeInitialise();
可以看到已经转换为24位图片了,完成工程代码请参见百度云网盘链接
链接:https://pan.baidu.com/s/1ble6TqEeOTS9u_OOkK_hRQ
提取码:7g7v
参考链接
1:https://blog.csdn.net/fairlikesnow/article/details/105377154?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
2:https://blog.csdn.net/a549875231/article/details/52048117
windows C++生成二维码图片相关推荐
- libqrencode生成二维码图片的问题
libqrencode在生成编码后,如何生成二维码图片.可以通过libpng来生成二维码图片文件.但在在网络通信中,先生成二维码图片文件,再读取文件数据,发送出去,这是一种可行的方法. 但是有没有一种 ...
- C# 利用QRCode生成二维码图片
网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快.但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴.这是本要用它做了 ...
- 使用Java生成二维码图片(亲测)
下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...
- 基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能
NextQRCode ZXing开源库的精简版 **基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能 原文博客 附源码下载地址** 与原ZXingMini项目对比 N ...
- PHP根据指定url生成二维码图片
一.composer安装 http://packagist.p2hp.com/packages/codeitnowin/barcode 二.使用 调用generateQrCode()方法即可实现生成二 ...
- springboot2整合二维码 生成二维码图片及输出web端及打印
step1 导包 <!-- 二维码 --><dependency><groupId>com.google.zxing</groupId><arti ...
- Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能
之前我写过一篇博客是关于如何将zxing集成到Android Studio中,以及简单的实现扫一扫功能. 详情请看:Android Studio集成Zxing扫一扫 但是,上面那篇博客只有有一个扫一扫 ...
- qrCode生成二维码图片
QRCode.js 是一个用于生成二维码图片的插件. 1.文件脚本 var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,th ...
- android 分享二维码图片到微信QQ(url地址字符串生成二维码图片、分享二维码图片到微信QQ)
主要用到的功能 1.url地址字符串生成二维码图片 2.分享二维码图片到微信QQ 所需的依赖包 implementation 'com.google.zxing:core:3.0.1' 代码 1.将U ...
最新文章
- 会计的思考(36):会计--企业运营的数码相机
- 张宏江对话清华“智班”:我想看到更多极客
- linux 抓包 tcpdump和Wireshark
- 实验0-Hive配置与启动
- configSections
- Web消息主体风格(Message Body Style)
- 微课视频小学用计算机画画,初识电脑绘画
- 如何避免 Go 命令行执行产生“孤儿”进程?
- Shape Correspondence and Functional Maps
- 使用LIstView和自定义Adapter完成列表信息显示
- Ubuntu18.04忘记密码解决
- darknet框架_【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
- laravel 配置邮件发件人_Jenkins中配置自动化测试项目
- 同步京东、抖音、淘宝等多处订单到本地商城,这里只举例京东同步
- 影响计算机性能的决定因素,影响cpu性能的因素有哪些
- Spring + JedisCluster操作Redis(集群)
- html5横竖条纹背景,CSS制作Web页面条纹背景样式的介绍
- [锐捷客户端]提示虚拟网卡加载失败解决办法 - macOS系统
- 深入理解jvm(转)
- unix系统编程c语言,关于unix系统编程的一个小问题