您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity编程 >
    结合zxing制做二维码
    时间:2015-03-24 09:32 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    结合zxing制做二维码。二维码越来越融入人们的生活,并且二维码比起条形码更有自身的优势,

    比如它高达千个字符的容量、纠错能力及汉字支持。二维码现在在国内已经有不少领域应用到,

    特别是在网站及移动端中更是应用得更加广泛。


    网上有很多demo,但大多是java跟C#之类。因为Unity3D本身也支持C#语法并在mono环境下运行,

    所以我们查找二维码在C#下的示例即可。zxing之前就早有耳闻,特别是在java上用得特别多。


    首先,先把mono版本的System.Drawing.dll复制到Unity3D项目的任意位置下。


    引入命名空间:

    Using UnityEngine;
    Using System;
    Using System.IO;
    Using System.Collections;
    Using System.Drawing;
    Using com.google.zxing.qrcode;
    Using com.google.zxing;
    Using com.google.zxing.common;
    Using ByteMatrix = com.google.zxing.common.ByteMatrix;
    Using EAN13Writer = com.google.zxing.oned.EAN13Writer;
    Using EAN8Writer = com.google.zxing.oned.EAN8Writer;
    Using MultiFormatWriter = com.google.zxing.MultiFormatWriter;


    定义一个Texture2D类型用于显示二维码,命名为_texure2d,长与宽为300像素;

    定义一个ByteMatrix类,用于写入二维码信息。


    privateint_width = 300;
    privateint_height = 300;
    publicTexture2D _texure2d;
    privatebool_success;
    privatestringinput = "";
    ByteMatrix byteMatrix;


    记得初始化Texture2D。


    void Start()
    {
    _texure2d = newTexture2D(_width, _height);
    }


    下面用文本输入框作为二维码的信息来源,再添加一个按钮作为触发。

    发明一个MultiFormatWriter用于二维码写入用,用其encode方法生成一个ByteMatrix类。

    再用ByteMatrix的方法ToBitmap成生bitmap对象,最后得到bitmap的数组再赋值于texture2d。

    在这里我定义了一个ImageToByte提取bitmap的数组。因为是UI事件,所以我们把代码写到OnGUI中。


    void OnGUI()
    {
    input = GUI.TextField(newRect(100, 50, 100, 40), input);
    if(GUI.Button(newRect(100, 100, 100, 40), "生成"))
    {
    byteMatrix = newMultiFormatWriter().encode(input, BarcodeFormat.QR_CODE, _width, _height);
    _texure2d.LoadImage(ImageToByte(byteMatrix.ToBitmap()));
    _success = true;
    }
    //画图
    if(_success) GUI.DrawTexture(newRect(100, 300, 300, 300), _texure2d);
    }
    staticbyte[] ImageToByte(Image img)
    {
    ImageConverter converter = newImageConverter();
    return(byte[])converter.ConvertTo(img, typeof(byte[]));
    }

    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。