博客
关于我
unityZXing二维码的生成与扫描
阅读量:81 次
发布时间:2019-02-26

本文共 4139 字,大约阅读时间需要 13 分钟。

借鉴自某位大佬不记得了

using System.Collections;using System.Collections.Generic;using UnityEngine;using ZXing;using UnityEngine.UI;/// /// 二维码扫描识别功能/// public class TestQRCodeScanning : MonoBehaviour {    [Header("摄像机检测界面")]    public RawImage cameraTexture;//摄像机映射显示区域       private WebCamTexture webCamTexture;//摄像机映射纹理    public Text text;//用来显示扫描信息    //二维码识别类    BarcodeReader barcodeReader;//库文件的对象(二维码信息保存的地方)    ///     /// 开启摄像机和准备工作    ///     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;//二维码图片信息以像素点颜色信息数组存放    ///     /// 识别摄像机图片中的二维码信息    /// 打印二维码识别到的信息    ///     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();        }    }    ///     /// Start 初始化函数    ///     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:

下载之后把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;    ///     /// 将制定字符串信息转换成二维码图片信息    ///     /// 要生产二维码的字符串信息    /// 二维码的宽度    /// 二维码的高度    /// 
返回二维码图片的颜色数组信息
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); } /// /// 根据二维码图片信息绘制指定字符串信息的二维码到指定区域 /// /// 要生产二维码的字符串信息 /// 二维码的宽度 /// 二维码的高度 ///
返回绘制好的图片
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; } /// /// 开始绘制指定信息的二维码 /// /// 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); }}

 

转载地址:http://isfz.baihongyu.com/

你可能感兴趣的文章
mysql 添加索引
查看>>
MySQL 添加索引,删除索引及其用法
查看>>
mysql 状态检查,备份,修复
查看>>
MySQL 用 limit 为什么会影响性能?
查看>>
MySQL 用 limit 为什么会影响性能?有什么优化方案?
查看>>
MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
查看>>
mysql 用户管理和权限设置
查看>>
MySQL 的 varchar 水真的太深了!
查看>>
mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
查看>>
MySQL 的instr函数
查看>>
MySQL 的mysql_secure_installation安全脚本执行过程介绍
查看>>
MySQL 的Rename Table语句
查看>>
MySQL 的全局锁、表锁和行锁
查看>>
mysql 的存储引擎介绍
查看>>
MySQL 的存储引擎有哪些?为什么常用InnoDB?
查看>>
Mysql 知识回顾总结-索引
查看>>
Mysql 笔记
查看>>
MySQL 精选 60 道面试题(含答案)
查看>>
mysql 索引
查看>>
MySQL 索引失效的 15 种场景!
查看>>