unityZXing二维码的生成与扫描

所属分类: 软件编程 / C#教程 阅读数: 140
收藏 0 赞 0 分享

本文实例为大家分享了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);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多