生成二维码

用libqrencode库,可以到https://github.com/fukuchi/libqrencode下载自己编译。

使用时参考下面

#include <stdio.h>  
#include <Windows.h>  
#include <qrencode.h>  

//#pragma comment(lib,"libqrencode.lib")  
#define BMP_SCALE 8
int main()
{
	const char * QRTEXT = "6546546546546515615231548468465351321654564654654564564156456456564654184564654";
	QRcode * qrCode;
	int version = 1;//设置版本号,这里设为5,对应尺寸:37 * 37  
	QRecLevel level = QR_ECLEVEL_L;
	QRencodeMode hint = QR_MODE_8;
	int casesensitive = 1;
	qrCode = QRcode_encodeString(QRTEXT, version, level, hint, casesensitive);
	if (NULL == qrCode)
	{
		printf("QRcode create fail\n");
		return -1;
	}

	//将要生成的二维码保存为BMP真彩色图片文件  
	FILE * pf = fopen("qrcode.bmp", "wb");
	if (NULL == pf)
	{
		printf("file open fail.\n");
		fclose(pf);
		return -1;
	}
	int width = qrCode->width * BMP_SCALE;
	int height = qrCode->width * BMP_SCALE;
	int biCount = 24;//真彩色  
	int lineByte = (width * biCount / 8 + 3) / 4 * 4; //每line字节数必须为4的倍数  
	//位图文件头  
	BITMAPFILEHEADER bitMapFileHeader;
	bitMapFileHeader.bfType = 0x4D42;
	bitMapFileHeader.bfSize = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+lineByte * height;
	bitMapFileHeader.bfReserved1 = 0;
	bitMapFileHeader.bfReserved2 = 0;
	bitMapFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
	//位图信息头  
	BITMAPINFOHEADER bitMapInfoHeader;
	bitMapInfoHeader.biBitCount = biCount;
	bitMapInfoHeader.biClrImportant = 0;
	bitMapInfoHeader.biClrUsed = 0;
	bitMapInfoHeader.biCompression = 0;
	bitMapInfoHeader.biHeight = height;
	bitMapInfoHeader.biPlanes = 1;
	bitMapInfoHeader.biSize = 40;
	bitMapInfoHeader.biSizeImage = lineByte * height;
	bitMapInfoHeader.biWidth = width;
	bitMapInfoHeader.biXPelsPerMeter = 0;
	bitMapInfoHeader.biYPelsPerMeter = 0;
	//写文件头进文件  
	fwrite(&bitMapFileHeader, sizeof(BITMAPFILEHEADER), 1, pf);
	//写位图信息头进文件  
	fwrite(&bitMapInfoHeader, sizeof(BITMAPINFOHEADER), 1, pf);
	unsigned char * pBMPData = new unsigned char[lineByte * height];
	memset(pBMPData, 255, lineByte * height);

	unsigned char * qrData = qrCode->data;
	for (int i = height; i > 0 ; i--)
	{
		for (int j = 0; j < lineByte / 3; j++)
		{
			if (*(qrData + (i / BMP_SCALE * qrCode->width + j / BMP_SCALE)) & 1)
			{
				//设置rgb颜色,可自定义设置,这里设为黑色。  
				*(pBMPData + lineByte * (i * 1) + 3 * (j * 1)) = 0;
				*(pBMPData + lineByte * (i * 1) + 3 * (j * 1) + 1) = 0;
				*(pBMPData + lineByte * (i * 1) + 3 * (j * 1) + 2) = 0;
			}
			//qrData++;
		}
	}

	//写数据进文件  
	fwrite(pBMPData, sizeof(unsigned char), lineByte * height, pf);
	fclose(pf);
	delete[] pBMPData;
	pBMPData = NULL;

	QRcode_free(qrCode);
	return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值