unityZXing二维码的生成与扫描

unityZXing二维码的生成与扫描借鉴自某位大佬不记得了 usingSystem Collections usingSystem Collections Generic usingUnityEn usingZXing usingUnityEn UI lt summary gt 二维码扫描识别功能 lt summary gt publicclassT

借鉴自某位大佬不记得了

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: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; ///  /// 将制定字符串信息转换成二维码图片信息 ///  /// 要生产二维码的字符串信息 /// 二维码的宽度 /// 二维码的高度 /// 
     
       返回二维码图片的颜色数组信息 
      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); } } 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204296.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午8:36
下一篇 2026年3月19日 下午8:36


相关推荐

  • 计算机常见显卡插槽是,显卡插槽有几种

    计算机常见显卡插槽是,显卡插槽有几种大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 显卡插槽有 4 种 主要包括 VGA dvi HDMI dp 这四种比较常见的接口 显卡参数是判断一款显卡好坏 性能如何的关键参数 显卡是继处理器之后 用户最为关心的硬件之一 显存工作频率越高性能越好 而显存的 ns 数值越小的显存能跑更高的频率 所以显存的 ns 被认为是显卡选购的关键之一 另外就是显存的品牌 显卡和主板上都有 内存 不过主板

    2026年3月17日
    2
  • LARGE_INTEGER解析和使用

    LARGE_INTEGER解析和使用这里解释前面碰到的LARGE_INTEGER结构。与可能的误解不同,64位数据并非要在64位操作系统下才能使用。在VC中,64位数据的类型为__int64。定义写法如下:     __int64file_offset;     上面之所以定义的变量名为file_offset,是因为文件中的偏移量是一种常见的要使用64位数据的情况。同时,文件的大小也是如此(回忆上一

    2022年7月25日
    18
  • 音频功放的种类和基本原理

    音频功放的种类和基本原理音频功放的种类和基本原理作者:AirCity2019.12.2Aircity007@sina.com本文所有权归作者Aircity所有1 简介功率放大器简称功放,它是将小信号放大,这个放大包括电压和电流,用更大的功率推动音响放声。在技术发展过程中,产生了不同类型的功放种类,按照功率管的导电方式,可以分为甲类功放(又称A类)、乙类功放(又称B类)、甲乙类功放(又称AB类)和丁类功放功…

    2022年6月4日
    36
  • dwarf程序

    dwarf程序解析全局变量 函数 局部变量并按一定格式保存 点击 此处 折叠或打开 includesys types h includesys stat h includefcntl h includestdli h

    2026年3月18日
    2
  • Python删除文件到回收站

    Python删除文件到回收站利用activepython里面的shell模块可以完成删除到回收站的操作,如下:fromwin32com.shellimportshell,shellcondefdeltorecyclebin(filename):   shell.SHFileOperation((0,shellcon.FO_DELETE,filename,None,/      shellc

    2022年5月30日
    40
  • 【Android】 RecyclerView、ListView实现单选列表的优雅之路.

    【Android】 RecyclerView、ListView实现单选列表的优雅之路.转载请标明出处:http://blog.csdn.net/zxt0601/article/details/52703280本文出自:【张旭童的博客】一概述:这篇文章需求来源还是比较简单的,但做的优雅仍有值得挖掘的地方。需求来源:一个类似饿了么这种电商优惠券的选择界面:其实就是一个普通的列表,实现了单选功能,效果如图:(不要怪图渣了,我撸了四五遍,公司录出来的GIF就这么

    2022年5月30日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号