unity使用Zxing的.net库搞二维码与条形码的事

来源:互联网 发布:des密码算法 编辑:程序博客网 时间:2024/06/14 18:24


前端时间,我们的3D配送仿真系统需要与公司的配送管理系统对接,其中有一个小功能就是当3D中货物订单生成后,需要用一个外设来录入,这个外设叫手持设备,如下图,


刚看到这玩意我是懵逼的,网上一查这玩意根据你买的不同可运行javaandroidwindows等,那仔细一想,不就是两个系统之间的数据传递了,数据的中转我们用mysql就行。大致原理如下:

1Unity3D物体发生变化导致订单随之变化并生成条形码。

2、手持通过扫描条形码展示相对应的订单信息

3、找到核心,其实就是订单ID

4unity货物变化后立马更新订单表,并根据订单ID生成条形码,随后手持设备扫描条形码得到订单ID,根据ID在数据库中去关联你想要展示的数据即可。

这是一个扩展应用,没有很大的难度,只需要搞清楚zxing库的原理以及你需求实现的思路就行。

步骤如下

1、zxing.dll放入工程plugins下。

2、复制当前unity版本安装目录下的System.Drawing.dll也放入plugins目录下。必须是当前版本,否则崩溃的你找不到东南西北。

3、调用ZXingUitil类中的QrCreat方法即可返回条形码的texture

4、得到Texture后你想咋搞就咋搞,GUINGUIUGUI为你所用。

效果如下图:

代码如下:

using UnityEngine;using System.Collections;using System.Drawing;using ZXing.QrCode;using ZXing;using ZXing.Common;using ZXing.Rendering;using ZXing.QrCode.Internal;using System;/// <summary>/// zxing 工具类,用来生成订单信息条形码/// 李佼 /// </summary>public class ZXingUitil : MonoBehaviour{    private int _width = 370;    private int _height = 100;    private Texture2D _texure2d;    private bool _success;    public static ZXingUitil instance;    EncodingOptions options = null;    BarcodeWriter writer = null;    void Awake()    {        instance = this;    }    void Start()    {        _texure2d = new Texture2D(_width, _height);        options = new EncodingOptions        {            Width = _width,            Height = _height        };        writer = new BarcodeWriter();        writer.Format = BarcodeFormat.ITF;        writer.Options = options;    }    /// <summary>    /// 传入条形码内容 返回条码图,条形码须为偶数位    /// </summary>    /// <param name="barcode"></param>    /// <returns></returns>    public Texture2D QrCreat(string barcode)    {        try        {            Bitmap bitmap = writer.Write(barcode);            _texure2d.LoadImage(ImageToByte(bitmap));            return _texure2d;        }        catch (Exception e)        {            Debug.LogError("z xing error");            return null;        }    }    public Texture2D QrCreat(string barcode, Vector2 imageVec)    {        _texure2d = new Texture2D((int)imageVec.x, (int)imageVec.y);        Bitmap bitmap = writer.Write(barcode);        _texure2d.LoadImage(ImageToByte(bitmap));        return _texure2d;    }    private byte[] ImageToByte(Image img)    {        ImageConverter converter = new ImageConverter();        return (byte[])converter.ConvertTo(img, typeof(byte[]));    }}


0 0
原创粉丝点击