zoukankan      html  css  js  c++  java
  • unityZXing二维码的生成与扫描

    此文转载自:https://blog.csdn.net/weixin_41995872/article/details/85989478

    借鉴自某位大佬不记得了

    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:https://archive.codeplex.com/?p=zxingnet

    下载之后把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);
        }
    }
    
       

    更多内容详见微信公众号:Python测试和开发

    Python测试和开发

  • 相关阅读:
    编程模式
    iOS----FMDB---看这个可以解决大部分你遇到的问题
    iOS UITableView的使用
    ios文件系统文件目录操作
    Core Data-备用
    数组去重复
    用法总结:NSArray,NSSet,NSDictionary-备用
    iOS 摇一摇的实现
    更改xcode上iphone模拟器颜色的方法--备用
    模式识别之基础---mqdf分类器==MQDF改进的二次分类器
  • 原文地址:https://www.cnblogs.com/phyger/p/14357332.html
Copyright © 2011-2022 走看看