首页 > 编程 > C# > 正文

unityZXing二维码的生成与扫描

2020-01-24 00:02:20
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表