• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

unityZXing二维码的生成与扫描

c# 搞代码 4年前 (2022-01-09) 24次浏览 已收录 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: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(s<b style="color:transparent">本文来源gao@!dai!ma.com搞$$代^@码!网!</b>tring 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);
  }
}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:unityZXing二维码的生成与扫描
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址