libqrencode生成二维码并保存成bmp图片
来源:互联网 发布:美萌家cos淘宝店铺 编辑:程序博客网 时间:2024/05/21 17:16
#include "qrencode.h"#define QT_OUT_FILE "/root/Application/QRBMP/qrpay.bmp"// Prescaler (number of pixels in bmp file for each QRCode pixel, on each dimension)#define OUT_FILE_PIXEL_PRESCALER 4 // Color of bmp pixels #define PIXEL_COLOR_R 0xff #define PIXEL_COLOR_G 0#define PIXEL_COLOR_B 0#define BI_RGB 0L#pragma pack(push, 2) //2字节对齐,不然会出问题typedef struct{ unsigned short bfType; unsigned long bfSize; unsigned short bfReserved1; unsigned short bfReserved2; unsigned long bfOffBits;} BITMAPFILEHEADER;typedef struct{ unsigned long biSize; signed long biWidth; signed long biHeight; unsigned short biPlanes; unsigned short biBitCount; unsigned long biCompression; unsigned long biSizeImage; signed long biXPelsPerMeter; signed long biYPelsPerMeter; unsigned long biClrUsed; unsigned long biClrImportant;} BITMAPINFOHEADER;#pragma pack(pop)int Save_QEImage(char* szSourceSring){ unsigned int unWidth, x, y, l, n, unWidthAdjusted, unDataBytes; unsigned char* pRGBData, *pSourceData, *pDestData; QRcode* pQRC; FILE* f; // Compute QRCode 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 buffer if (!(pRGBData = (unsigned char*)malloc(unDataBytes))) { printf("Out of memory"); return 1; } // Preset to white memset(pRGBData, 0xff, unDataBytes); // Prepare bmp headers BITMAPFILEHEADER 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 pixels pSourceData = 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 file //f = fopen(QT_OUT_FILE,"wb"); f = fopen(QT_OUT_FILE,"ab++"); if (f != NULL) { fwrite(&kFileHeader, sizeof(BITMAPFILEHEADER), 1, f); fwrite(&kInfoHeader, sizeof(BITMAPINFOHEADER), 1, f); fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f); fclose(f); } else { printf("Unable to open file\n"); return 1; } // Free data free(pRGBData); QRcode_free(pQRC); } else { printf("NULL returned"); return 1; } return 0;}
阅读全文
0 0
- libqrencode生成二维码并保存成bmp图片
- 利用libqrencode生成二维码并保持成bmp图片
- libqrencode学习笔记(二): 用libqrencode静态库库生成二维码并保存为BMP图片
- ios 生成二维码图片libqrencode
- libqrencode生成二维码图片的问题
- 生成二维码图片并保存图片功能
- 生成二维码并将Bitmap保存成图片
- 生成并保存二维码
- 基于libqrencode的二维码生成
- iOS原生二维码扫描&libqrencode生成二维码
- 嵌入式平台 STM32 libqrencode 移植 二维码生成
- 将图片自己转换成BMP并缩放保存。
- Unity结合ZXing生成二维码并保存
- Android扫码/生成二维码并保存
- 微信批量生成二维码并保存
- Unity结合ZXing生成二维码并保存
- 使用二维码生成框架libqrencode时遇到的问题解决办法
- iOS -- 二维码生成使用cocoapods导入libqrencode第三方库
- jQuery教程 3 选择器
- 机器学习(29)之奇异值分解SVD原理与应用详解
- mysql安装与修改root密码
- listview点击失效解决
- typedef和define具体的详细区别
- libqrencode生成二维码并保存成bmp图片
- Netty实战学习笔记(一)——Netty的概念及体系结构
- POJ 3984 迷宫问题(BFS+STL queue)
- [RK3399][Android7.1] Ubuntu编译环境内存要求
- JAVA基础-类2-类的特性
- 近日,百度《互联网从业人员单身情况调查报告》新鲜出炉,调查人群是日前火了一把的西二旗互联网从业者(转载)
- InstanceOf
- Linux服务器下重启svn服务
- spring-data-redis-2(实现并发操作:秒杀)