C++ 生成二维码

本文介绍了如何使用C++通过QR-Code-generator库生成二维码,包括编码文本、调整纠错级别,并演示了将二维码绘制到HDC和保存为本地图片的过程。特别提到中文编码注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客:
二维码生成原理及解析代码

生成二维码的库(二选一)

HDC绘画二维码

using qrcodegen::QrCode;

void DrawQRCode(HDC hdc,RECT rtClient)
{
	const char *text = "https://blog.youkuaiyun.com/cair2/category_2930179.html";
	const QrCode::Ecc errCorLvl = QrCode::Ecc::HIGH;
	//如果text包含中文请转换成utf-8
	QrCode qr = QrCode::encodeText(text, errCorLvl);
	FillRect(hdc, &rtClient, (HBRUSH)GetStockObject(BLACK_BRUSH));
	
	HDC hMemDc = CreateCompatibleDC(hdc);
	HBITMAP hMemBitMap = CreateCompatibleBitmap(hdc, qr.getSize(), qr.getSize());
	SelectObject(hMemDc, hMemBitMap);

	RECT rt = { 0, 0, qr.getSize(), qr.getSize() };
	FillRect(hMemDc, &rt, (HBRUSH)GetStockObject(WHITE_BRUSH));
	for (int y = 0; y < qr.getSize(); y++)
	{
		for (int x = 0; x < qr.getSize(); x++)
		{
			if (qr.getModule(x, y) == 0)
			{
				SetPixel(hMemDc,x, y, RGB(255, 255, 255));
			}
			else
			{
				SetPixel(hMemDc,x, y, RGB(0, 0, 0));
			}
		}
	}
	StretchBlt(hdc, 100, 10, 400, 400, hMemDc, 0, 0, qr.getSize(), qr.getSize(), SRCCOPY);
	DeleteDC(hMemDc);
	DeleteObject(hMemBitMap);
}

生成二维码图片并保存本地

NOTE

如果encodeText的内容包括中文,请转换成utf-8编码之后生成二维码,否则内容不对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值