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



前端时间,我们的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[]));
    }
}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值