基于qrencode-3.4.4的二维码生成
来源:互联网 发布:淘宝页面显示有问题 编辑:程序博客网 时间:2024/05/20 12:49
MFC DEMO程序下载地址点击打开链接
VS版本号:VS2008
/*//////////////////////////////////////功能:生成QR二维码参数:szText:二维码内容szFileName:生成二维码的输出路径,路径必须存在nWidth二维码图像宽度返回: 0 - 生成成功-1 - QR编码失败-2 - 分配内存失败-3 - 创建文件失败*///////////////////////////////////////long QRGenerate(const char * szText, const char * szFileName, int nWidth){long lRet= 0;QRcode * pQRC = NULL;if (pQRC = QRcode_encodeString(szText, 0, QR_ECLEVEL_H, QR_MODE_8, 1)){unsigned intunWidth, x, y, l, n, unWidthAdjusted, unDataBytes;unsigned char*pRGBData, *pSourceData, *pDestData;FILE*f;unWidth = pQRC->width;int nOutFilePixelPrescaler = nWidth/unWidth;unWidthAdjusted = unWidth * nOutFilePixelPrescaler * 3;if (unWidthAdjusted % 4)unWidthAdjusted = (unWidthAdjusted / 4 + 1) * 4;unDataBytes = unWidthAdjusted * unWidth * nOutFilePixelPrescaler;// Allocate pixels bufferif (!(pRGBData = (unsigned char*)malloc(unDataBytes))){//printf("Out of memory");lRet = -2;}else{// 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 * nOutFilePixelPrescaler;kInfoHeader.biHeight = -((int)unWidth * nOutFilePixelPrescaler);kInfoHeader.biPlanes = 1;kInfoHeader.biBitCount = 24;kInfoHeader.biCompression = BI_RGB;kInfoHeader.biSizeImage = unDataBytes;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 * nOutFilePixelPrescaler;for(x = 0; x < unWidth; x++){if (*pSourceData & 1){for(l = 0; l < nOutFilePixelPrescaler; l++){for(n = 0; n < nOutFilePixelPrescaler; 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 * nOutFilePixelPrescaler;pSourceData++;}}// Output the bmp fileif (!(fopen_s(&f, szFileName, "wb"))){fwrite(&kFileHeader, sizeof(BITMAPFILEHEADER), 1, f);fwrite(&kInfoHeader, sizeof(BITMAPINFOHEADER), 1, f);fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f);fclose(f);}else{lRet = -3;}}// Free datafree(pRGBData);QRcode_free(pQRC);}else{lRet = -1;}return lRet;}
/*//////////////////////////////////////功能:生成QR二维码参数:szText:二维码内容szFileName:生成二维码的输出路径,路径必须存在返回:0 - 生成成功-1 - QR编码失败-2 - 分配内存失败-3 - 创建文件失败*///////////////////////////////////////typedef long (*pQrGenerate)(const char * szText, const char * szFileName, int nWidth);void CQRGeneratorTestDlg::OnBnClickedOk(){// TODO: 在此添加控件通知处理程序代码HMODULE hDll = LoadLibrary("QRGenerator.dll");if (hDll){pQrGenerate fnQRGenerate = (pQrGenerate)GetProcAddress(hDll, "QRGenerate");CString strText;CString strFileName = _T("./test.bmp");GetDlgItemText(IDC_EDIT1, strText);if (fnQRGenerate){long lRet = fnQRGenerate((LPCTSTR)strText, (LPCTSTR)strFileName, 200);if (lRet == 0){if (m_pic.Load(strFileName)){m_pic.Draw();}}}FreeLibrary(hDll);}}界面展示效果如下:
阅读全文
0 0
- 基于qrencode-3.4.4的二维码生成
- 使用qrencode库生成二维码
- 二维码生成软件qrencode的安装与试用
- qrencode二维码生成在linux下的编译
- qrencode二维码生成在linux下的编译(转)
- C#下利用移植的qrencode生成二维码
- QrenCode : 命令行下生成二维码图片
- QrenCode:命令行下生成二维码图片
- QR_ENCODE_3.2 qrencode 二维码生成和识别
- Linux下二维码生成工具:QRencode
- Linux下二维码生成工具:QRencode
- Qt:二维码的解析/扫描(QZxing)与生成(qrencode)
- qt/c++ 实现二维码生成(利用qrencode)
- 移植qrencode到ARM-Linux,实现字符串生成二维码图片
- 基于libqrencode的二维码生成
- QT二维码开源库qrencode
- 基于ZXing的二维码生成与识别
- 基于canvas的二维码邀请函生成插件
- python学习(20)——正则表达式及各类常用内建模块
- Linux unzip解压多个文件
- 算法-->递归
- 使用cos.jar包实现文件上传功能
- SQL 创建字段说明并查询
- 基于qrencode-3.4.4的二维码生成
- URL中的特殊字符处理笔记
- Java用poi读取excel文件
- Java基础篇之初识Java
- IAR9.0以上版本编译低版本的协议栈常见错误及解决方法
- KMP算法总结
- Angular2/4打开一个新的页面显示详细信息
- 安卓开发第一遭
- (转载)常用Java API