unityZXing二维码的生成与扫描
程序员文章站
2022-05-26 17:20:14
本文实例为大家分享了unityzxing二维码生成与扫描的具体代码,供大家参考,具体内容如下
借鉴自某位大佬不记得了
using system.collecti...
本文实例为大家分享了unityzxing二维码生成与扫描的具体代码,供大家参考,具体内容如下
借鉴自某位大佬不记得了
using system.collections; using system.collections.generic; using unityengine; using zxing; using unityengine.ui; /// <summary> /// 二维码扫描识别功能 /// </summary> public class testqrcodescanning : monobehaviour { [header("摄像机检测界面")] public rawimage cameratexture;//摄像机映射显示区域 private webcamtexture webcamtexture;//摄像机映射纹理 public text text;//用来显示扫描信息 //二维码识别类 barcodereader barcodereader;//库文件的对象(二维码信息保存的地方) /// <summary> /// 开启摄像机和准备工作 /// </summary> void deviceinit() { //1、获取所有摄像机硬件 webcamdevice[] devices = webcamtexture.devices; //2、获取第一个摄像机硬件的名称 string devicename = devices[0].name;//手机后置摄像机 //3、创建实例化一个摄像机显示区域 webcamtexture = new webcamtexture(devicename, 400, 300); //4、显示的图片信息 cameratexture.texture = webcamtexture; //5、打开摄像机运行识别 webcamtexture.play(); //6、实例化识别二维码信息存储对象 barcodereader = new barcodereader(); } color32[] data;//二维码图片信息以像素点颜色信息数组存放 /// <summary> /// 识别摄像机图片中的二维码信息 /// 打印二维码识别到的信息 /// </summary> void scanqrcode() { //7、获取摄像机画面的像素颜色数组信息 data = webcamtexture.getpixels32(); //8、获取图片中的二维码信息 result result = barcodereader.decode(data,webcamtexture.width,webcamtexture.height); //如果获取到二维码信息了,打印出来 if (result!=null) { debug.log(result.text);//===》==》===》 这是从二维码识别出来的信息 text.text = result.text;//显示扫描信息 //扫描成功之后的处理 isscanning = false; webcamtexture.stop(); } } /// <summary> /// start 初始化函数 /// </summary> private void start() { scanningbutton.onclick.addlistener(scanningbuttonclick); } bool isscanning = false; float interval = 3;//扫描识别时间间隔 [serializefield] button scanningbutton; void scanningbuttonclick() { deviceinit(); isscanning = true; } private void update() { if (isscanning) { //每隔一段时间进行一次识别二维码信息 interval += time.deltatime; if (interval>=3) { interval = 0; scanqrcode();//开始扫描 } } } }
zxing:zingnet
下载之后把zxing.unity.dll拷贝到unity的plugins文件夹下,
zxing.unity.dll下载之后的位置找到unitydemo/assets下
using system.collections; using system.collections.generic; using unityengine; using unityengine.ui; using zxing; //二维码的生成 public class testqrcodedraw : monobehaviour { [header("绘制好的二维码显示界面")] public rawimage qrcode; //二维码绘制类 barcodewriter barcodewriter; [serializefield] button drawbutton; /// <summary> /// 将制定字符串信息转换成二维码图片信息 /// </summary> /// <param name="formatstr">要生产二维码的字符串信息</param> /// <param name="width">二维码的宽度</param> /// <param name="height">二维码的高度</param> /// <returns>返回二维码图片的颜色数组信息</returns> color32[] geneqrcode(string formatstr,int width,int height) { //绘制二维码前进行一些设置 zxing.qrcode.qrcodeencodingoptions options = new zxing.qrcode.qrcodeencodingoptions(); //设置字符串转换格式,确保字符串信息保持正确 options.characterset = "utf-8"; //设置绘制区域的宽度和高度的像素值 options.width = width; options.height = height; //设置二维码边缘留白宽度(值越大留白宽度大,二维码就减小) options.margin = 1; //实例化字符串绘制二维码工具 barcodewriter = new barcodewriter {format=barcodeformat.qr_code,options=options }; //进行二维码绘制并进行返回图片的颜色数组信息 return barcodewriter.write(formatstr); } /// <summary> /// 根据二维码图片信息绘制指定字符串信息的二维码到指定区域 /// </summary> /// <param name="str">要生产二维码的字符串信息</param> /// <param name="width">二维码的宽度</param> /// <param name="height">二维码的高度</param> /// <returns>返回绘制好的图片</returns> texture2d showqrcode(string str,int width,int height) { //实例化一个图片类 texture2d t = new texture2d(width, height); //获取二维码图片颜色数组信息 color32[] col32 = geneqrcode(str, width, height); //为图片设置绘制像素颜色信息 t.setpixels32(col32); //设置信息更新应用下 t.apply(); //将整理好的图片信息显示到指定区域中 return t; } /// <summary> /// 开始绘制指定信息的二维码 /// </summary> /// <param name="formatstr"></param> void drawqrcode(string formatstr) { //注意:这个宽高度大小256不要变。不然生成的信息不正确 //256有可能是这个zxingnet插件指定大小的绘制像素点数值 texture2d t = showqrcode(formatstr, 256, 256); //显示到ui界面的图片上 qrcode.texture = t; } public string qrcodetext = "二维码"; void drawbuttonclick() { drawqrcode(qrcodetext); } private void start() { drawbutton.onclick.addlistener(drawbuttonclick); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。