利用libqrencode生成二维码并保持成bmp图片
点击打开原文链接
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图片相关推荐
- Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)
说明: (1)本篇博客主要内容是:开发[前台:生成支付二维码]接口: (2)本篇博客需要注意的点有: ● 支付url的拼凑: ● 利用zxing生成二维码: ● 二维码图片的存储:真实地址与可访问地址 ...
- 利用VUE生成二维码(两种方式)
利用Vue生成二维码 Author:kak vue有两种生成二维码的方式,qrcode.vue-qr(有icon): 1.qrcode npm ``install` `--save qrcodejs2 ...
- 使用phpqrcode.php生成二维码并合并到背景图片上
使用phpqrcode.php生成二维码并合并到背景图片上 1.找到phpqrcode类库的phpqrcode.php下载放进你的项目,再引入到你的开发代码中 (1)下载地址:http://phpqr ...
- qrcode.js 生成二维码包含logo和背景图片及IE下载二维码
思路: 1. 通过qrcode.js 生成带logo的二维码 2. 将背景图片.logo与生成的二维码图通过canvas 绘制在一起形成一个新的canvas 3. 将canvas 转成base64的u ...
- js前端根据链接生成二维码并转成图片下载
js前端根据链接生成二维码并转成图片下载 依赖于jquery.jquery.qrcode.min.js 1.html <div class="qrcode"></ ...
- libqrencode生成二维码图片的问题
libqrencode在生成编码后,如何生成二维码图片.可以通过libpng来生成二维码图片文件.但在在网络通信中,先生成二维码图片文件,再读取文件数据,发送出去,这是一种可行的方法. 但是有没有一种 ...
- java利用zxing生成二维码
什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...
- Android利用zxing生成二维码
感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...
- Android利用zxing生成二维码,识别二维码,中间填充图片超详细、超简易教程
gayhub上的zxing可用于生成二维码,识别二维码 gayhub地址:https://github.com/zxing/zxing 此文只是简易教程,文末附有完整代码和demo下载地址,进入正题: ...
最新文章
- Rocky(dfs)
- 商品管理到底重不重要?
- 计算机专业多元协同,项目主导多元协同资源开放—软件技术专业人才培养体系的创新实践.pdf...
- BugkuCTF-MISC题where is flag
- Kali Linux 从入门到精通(三)-入侵系统定制
- 常用的第三方库(OC)
- 【数据结构 by 解学武】线性表简介
- 关于Android学习要问的一些问题
- VS2012下基于Glut OpenGL GL_STENCIL_TEST示例程序:
- 人脸识别中常用的几种分类器
- C#_自动化测试3_controll IE
- 04 - Masonry使用练习
- ORM框架 Dapper
- DNS服务双解析邮箱地址
- 大数据之编程语言:Scala视频教程-陈超-专题视频课程
- 自然辩证法2018版_2018年《自然辩证法概论》已整理
- nx零件库插件_ug标准件库下载
- 微信小程序获取用户收货地址
- javaScript键值码
- 重型柴油车OBD系统进入逻辑
热门文章
- win10 忘记本地账户密码 可指纹或pin 等方式登录 找回密码 家庭版 专业版 教程 简单
- 计算机名称更改不生效,修改文件后缀名无效怎么办?Win7系统修改文件扩展名无效的解决方法...
- 【链环科技】网站建设过程中如何选择字体
- 简易的setData一个数据
- vue在微信里面的兼容问题_详解Vue微信公众号开发踩坑全记录
- yolov5训练高精度非机动车驾驶检测
- 前端笔记—从入门到坟墓[HTML][知识准备][1]
- 网赚小白怎么建设自己网站来进行营销推广
- python获取文档的真实创建时间(word、excel、ppt、pdf、图片)
- Endnote插入参考文献格式