点击打开原文链接

QR code二维码简介及Qrencode库的移植与使用

//QRGenerator.h
#pragma once#include <string>using std::string;#define OUT_FILE_PIXEL_PRESCALER   8    class QRGenerator
{
public:QRGenerator(void);~QRGenerator(void);static void generate(string& text, string& bmpSavedPath);
};//QRGenerator.cpp#include "QRGenerator.h"
#include "LibQREncode/qrencode.h"//#pragma comment(lib,"lib\\debug\\qrencode.lib")#define PIXEL_COLOR_R             0                                           // Color of bmp pixels
#define PIXEL_COLOR_G               0
#define PIXEL_COLOR_B               0xff//BMP defines
typedef unsigned short  WORD;
typedef unsigned long   DWORD;
typedef signed long     LONG;#define BI_RGB         0L#pragma pack(push, 2) //2字节对齐,不然会出问题
typedef struct
{WORD    bfType;DWORD   bfSize;WORD    bfReserved1;WORD    bfReserved2;DWORD   bfOffBits;
} BITMAPFILEHEADER;typedef struct
{DWORD      biSize;LONG       biWidth;LONG       biHeight;WORD       biPlanes;WORD       biBitCount;DWORD      biCompression;DWORD      biSizeImage;LONG       biXPelsPerMeter;LONG       biYPelsPerMeter;DWORD      biClrUsed;DWORD      biClrImportant;
} BITMAPINFOHEADER;#pragma pack(pop)QRGenerator::QRGenerator(void)
{}QRGenerator::~QRGenerator(void)
{}void QRGenerator::generate(string& text, string& bmpSavedPath)
{const char*        szSourceSring   = text.c_str();const char*     szSavePathSring = bmpSavedPath.c_str();unsigned int    unWidth, x, y, l, n, unWidthAdjusted, unDataBytes;unsigned char*    pRGBData, *pSourceData, *pDestData;QRcode*          pQRC;FILE*          f;if (pQRC = QRcode_encodeString(szSourceSring, 0, QR_ECLEVEL_H, QR_MODE_8, 1)){unWidth = pQRC->width; //矩阵的维数unWidthAdjusted = unWidth * OUT_FILE_PIXEL_PRESCALER * 3; //每一个维度占的像素的个数(8),每个像素3个字节if (unWidthAdjusted % 4)unWidthAdjusted = (unWidthAdjusted / 4 + 1) * 4;unDataBytes = unWidthAdjusted * unWidth * OUT_FILE_PIXEL_PRESCALER;// Allocate pixels bufferif (!(pRGBData = (unsigned char*)malloc(unDataBytes))){}// Preset to whitememset(pRGBData, 0xff, unDataBytes);// Prepare bmp headersBITMAPFILEHEADER kFileHeader;kFileHeader.bfType = 0x4d42;  // "BM"kFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + unDataBytes;kFileHeader.bfReserved1 = 0;kFileHeader.bfReserved2 = 0;kFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);BITMAPINFOHEADER kInfoHeader;kInfoHeader.biSize = sizeof(BITMAPINFOHEADER);kInfoHeader.biWidth = unWidth * OUT_FILE_PIXEL_PRESCALER;kInfoHeader.biHeight = -((int)unWidth * OUT_FILE_PIXEL_PRESCALER); //负数可以控制图像上下颠倒kInfoHeader.biPlanes = 1;kInfoHeader.biBitCount = 24;kInfoHeader.biCompression = BI_RGB;kInfoHeader.biSizeImage = 0;kInfoHeader.biXPelsPerMeter = 0;kInfoHeader.biYPelsPerMeter = 0;kInfoHeader.biClrUsed = 0;kInfoHeader.biClrImportant = 0;// Convert QrCode bits to bmp pixelspSourceData = pQRC->data;for (y = 0; y < unWidth; y++){pDestData = pRGBData + unWidthAdjusted * y * OUT_FILE_PIXEL_PRESCALER;for (x = 0; x < unWidth; x++){if (*pSourceData & 1){for (l = 0; l < OUT_FILE_PIXEL_PRESCALER; l++){for (n = 0; n < OUT_FILE_PIXEL_PRESCALER; n++){*(pDestData + n * 3 + unWidthAdjusted * l)     = PIXEL_COLOR_B;*(pDestData + 1 + n * 3 + unWidthAdjusted * l) = PIXEL_COLOR_G;*(pDestData + 2 + n * 3 + unWidthAdjusted * l) = PIXEL_COLOR_R;}}}pDestData += 3 * OUT_FILE_PIXEL_PRESCALER;pSourceData++;}}// Output the bmp fileif (!(fopen_s(&f, szSavePathSring, "wb"))){fwrite(&kFileHeader, sizeof(BITMAPFILEHEADER), 1, f);fwrite(&kInfoHeader, sizeof(BITMAPINFOHEADER), 1, f);fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f);fclose(f);}// Free datafree(pRGBData);QRcode_free(pQRC);}
}//main.cpp#include <stdio.h>
#include "QRGenerator.h"int main()
{string info = "IP:192.168.1.103,Port:9999";string savePath = "D:\\info.bmp";QRGenerator::generate(info, savePath);return 0;
}

利用libqrencode生成二维码并保持成bmp图片相关推荐

  1. Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)

    说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...

  2. 利用VUE生成二维码(两种方式)

    利用Vue生成二维码 Author:kak vue有两种生成二维码的方式,qrcode.vue-qr(有icon): 1.qrcode npm ``install` `--save qrcodejs2 ...

  3. 使用phpqrcode.php生成二维码并合并到背景图片上

    使用phpqrcode.php生成二维码并合并到背景图片上 1.找到phpqrcode类库的phpqrcode.php下载放进你的项目,再引入到你的开发代码中 (1)下载地址:http://phpqr ...

  4. qrcode.js 生成二维码包含logo和背景图片及IE下载二维码

    思路: 1. 通过qrcode.js 生成带logo的二维码 2. 将背景图片.logo与生成的二维码图通过canvas 绘制在一起形成一个新的canvas 3. 将canvas 转成base64的u ...

  5. js前端根据链接生成二维码并转成图片下载

    js前端根据链接生成二维码并转成图片下载 依赖于jquery.jquery.qrcode.min.js 1.html <div class="qrcode"></ ...

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

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

  7. java利用zxing生成二维码

    什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...

  8. Android利用zxing生成二维码

    感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...

  9. Android利用zxing生成二维码,识别二维码,中间填充图片超详细、超简易教程

    gayhub上的zxing可用于生成二维码,识别二维码 gayhub地址:https://github.com/zxing/zxing 此文只是简易教程,文末附有完整代码和demo下载地址,进入正题: ...

最新文章

  1. Rocky(dfs)
  2. 商品管理到底重不重要?
  3. 计算机专业多元协同,项目主导多元协同资源开放—软件技术专业人才培养体系的创新实践.pdf...
  4. BugkuCTF-MISC题where is flag
  5. Kali Linux 从入门到精通(三)-入侵系统定制
  6. 常用的第三方库(OC)
  7. 【数据结构 by 解学武】线性表简介
  8. 关于Android学习要问的一些问题
  9. VS2012下基于Glut OpenGL GL_STENCIL_TEST示例程序:
  10. 人脸识别中常用的几种分类器
  11. C#_自动化测试3_controll IE
  12. 04 - Masonry使用练习
  13. ORM框架 Dapper
  14. DNS服务双解析邮箱地址
  15. 大数据之编程语言:Scala视频教程-陈超-专题视频课程
  16. 自然辩证法2018版_2018年《自然辩证法概论》已整理
  17. nx零件库插件_ug标准件库下载
  18. 微信小程序获取用户收货地址
  19. javaScript键值码
  20. 重型柴油车OBD系统进入逻辑

热门文章

  1. win10 忘记本地账户密码 可指纹或pin 等方式登录 找回密码 家庭版 专业版 教程 简单
  2. 计算机名称更改不生效,修改文件后缀名无效怎么办?Win7系统修改文件扩展名无效的解决方法...
  3. 【链环科技】网站建设过程中如何选择字体
  4. 简易的setData一个数据
  5. vue在微信里面的兼容问题_详解Vue微信公众号开发踩坑全记录
  6. yolov5训练高精度非机动车驾驶检测
  7. 前端笔记—从入门到坟墓[HTML][知识准备][1]
  8. 网赚小白怎么建设自己网站来进行营销推广
  9. python获取文档的真实创建时间(word、excel、ppt、pdf、图片)
  10. Endnote插入参考文献格式