C++生成二维码总结

这段时间做一个模块,需要能自动生成二维码,查了不少资料,做一点总结吧。

 

1  二维码基本知识的资料,网上非常多,本质上就是一种数据的加密过程,设计到编码与校验,冗余等处理。这方面的资料就不展开了,可以自行搜索。

2  二维码相关的库,在手机上的库比较有名的是 zxing和zbar,google开源的库zxing比较合适。不过这些库都只有C++的解码,而不支持C++的编码,都有Java和C#相关的编码和解码。如果你是在手机上开发,这两个库都可以用。

3  Windows下,要编码的话,还有一个叫QR的库,CSDN下载里面能找到,我找到了多个版本,一个是采用模板文件方式,带一堆的模板文件,最后被我放弃,因为我的程序带着这么一大堆模板文件不太方便,另外一种库则全部自动生成,不需要模板文件。把编码部分的源代码剥离出来,做个DLL,效果还是比较好的,能够生成BMP文件和BITMAP对象。

4  不管哪个库,最后编码得到的数据结构,都是一个二维数组,数组中的1表示黑点,0表示白点。有的版本提供了将数据转换成图片的功能,有的需要自己绘制成图片。

 

注意点:

1  在将数据结构形成图像时,要扩展线宽,因为原来的数据只是一个点,把每个点绘制到一个像素上,太小了点,需要放大,每个点需要好几个像素来绘制,这里需要注意。

2  绘制后,确实形成了一个二维码图,可以用手机试试解码。如果解析不出来,可以把屏幕截屏然后粘贴到画图里面,将图片镜像一下,看看是否能解析,如果能解析,需要在生成图片的时候做好数据的倒序处理。如果还不能解析,那就有错了。

3  如果要写入中文,应该用Unicode字符串,然后用WideCharToMultiByte转换成UTF8字符串,然后再编码,肯定可以写入中文的。

4  二维码有冗余功能,因此破坏掉一部分也没问题,手机还能识别,这个时候,就可以在图片中心贴上一个LOGO小图片了,中心的小图片一般是不会影响二维码识别的。当然,这里最好提高二维码的冗余级别设置到第三级。

 

其他就没什么了,调用也很简单,注意Bmp写入文件的时候,宽度一定要是4的倍数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值