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++生成二维码图片相关推荐

  1. libqrencode生成二维码图片的问题

    libqrencode在生成编码后,如何生成二维码图片.可以通过libpng来生成二维码图片文件.但在在网络通信中,先生成二维码图片文件,再读取文件数据,发送出去,这是一种可行的方法. 但是有没有一种 ...

  2. C# 利用QRCode生成二维码图片

    网上生成二维码的组件是真多,可是真正好用的,并且生成速度很快的没几个,QRCode就是我在众多中找到的,它的生成速度快.但是网上关于它的使用说明,真的太少了,大都是千篇一律的复制粘贴.这是本要用它做了 ...

  3. 使用Java生成二维码图片(亲测)

    下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...

  4. 基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能

    NextQRCode ZXing开源库的精简版 **基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能 原文博客 附源码下载地址** 与原ZXingMini项目对比 N ...

  5. PHP根据指定url生成二维码图片

    一.composer安装 http://packagist.p2hp.com/packages/codeitnowin/barcode 二.使用 调用generateQrCode()方法即可实现生成二 ...

  6. springboot2整合二维码 生成二维码图片及输出web端及打印

    step1 导包 <!-- 二维码 --><dependency><groupId>com.google.zxing</groupId><arti ...

  7. Android超方便 集成 Zxing实现扫一扫,闪光灯,生成二维码图片,解析二维码(条码)等功能

    之前我写过一篇博客是关于如何将zxing集成到Android Studio中,以及简单的实现扫一扫功能. 详情请看:Android Studio集成Zxing扫一扫 但是,上面那篇博客只有有一个扫一扫 ...

  8. qrCode生成二维码图片

    QRCode.js 是一个用于生成二维码图片的插件. 1.文件脚本 var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,th ...

  9. android 分享二维码图片到微信QQ(url地址字符串生成二维码图片、分享二维码图片到微信QQ)

    主要用到的功能 1.url地址字符串生成二维码图片 2.分享二维码图片到微信QQ 所需的依赖包 implementation 'com.google.zxing:core:3.0.1' 代码 1.将U ...

最新文章

  1. 会计的思考(36):会计--企业运营的数码相机
  2. 张宏江对话清华“智班”:我想看到更多极客
  3. linux 抓包 tcpdump和Wireshark
  4. 实验0-Hive配置与启动
  5. configSections
  6. Web消息主体风格(Message Body Style)
  7. 微课视频小学用计算机画画,初识电脑绘画
  8. 如何避免 Go 命令行执行产生“孤儿”进程?
  9. Shape Correspondence and Functional Maps
  10. 使用LIstView和自定义Adapter完成列表信息显示
  11. Ubuntu18.04忘记密码解决
  12. darknet框架_【杂谈】面向新手的深度学习开源框架指导手册与GitHub项目,欢迎加入我们的开源团队...
  13. laravel 配置邮件发件人_Jenkins中配置自动化测试项目
  14. 同步京东、抖音、淘宝等多处订单到本地商城,这里只举例京东同步
  15. 影响计算机性能的决定因素,影响cpu性能的因素有哪些
  16. Spring + JedisCluster操作Redis(集群)
  17. html5横竖条纹背景,CSS制作Web页面条纹背景样式的介绍
  18. [锐捷客户端]提示虚拟网卡加载失败解决办法 - macOS系统
  19. 深入理解jvm(转)
  20. unix系统编程c语言,关于unix系统编程的一个小问题

热门文章

  1. python编程工具-7款Python开发工具介绍,你最中意哪一款
  2. 大盘点!进口+国产28款分子POCT设备分析
  3. 转载_进程、轻量级进程(LWP)、线程
  4. [JS]JSON字符串与JS对象的转换
  5. 对数据库某个字段进行去重
  6. Java里面的同步和异步
  7. FileReader 和 FileWriter(Second)
  8. 【数字IC验证快速入门】11、Verilog TestBench(VTB)入门
  9. METIS安装与使用
  10. 啊啊啊~~~~~ Ajax