• 感谢您的阅读。喜欢的、有用的就请大哥大嫂们高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力以及转载收藏动力。欢迎转载!
  • 版权声明:本文原创发表于 【请点击连接前往】 ,未经作者同意必须保留此段声明!如有问题请联系我,侵立删,谢谢!
  • 我的博客:http://www.cnblogs.com/GJM6/  -  传送门:【点击前往

二维码比起条形码更有自身的优势,比如它高达千个字符的容量、纠错能力及汉字支持。二维码现在在国内已经有不少领域应用到,特别是在网站及移动端中更是应用得更加广泛。

最近的项目中也需要用到二维码去显示一些摘要信息,然后用手机或者其它客户端显示出来。网上其实也不少demo,但大多是Java跟C#之类。

因为Unity3D本身也支持C#语法并在mono环境下运行,所以我们查找二维码在C#下的示例即可。于是又拼命的google,发现两个精品包,一个为zxing(地址为http://code.google.com/p/zxing/downloads/list),另一个则为QrCode(地址为http://qrcodenet.codeplex.com/)。zxing之听就早有耳闻,特别是在java上用得特别多,而其实QrCode也不少人用,是一个新神器来的,之前是采用了zxing的端口。

QrCode算是比较新颖的包,而且支持也相当不错,但很可惜,只能是在.net 4.0环境下运行,所以在unity3d下我只能选择zxing。

下面我们做一个简单的示例去显示一个二维码。

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

引入命名空间

1
2
3
4
5
6
7
8
9
10
11
12
13
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类,用于写入二维码信息。

1
2
3
4
5
6
private int _width = 300;
private int _height = 300;
public Texture2D _texure2d;
private bool _success;
private string input = "";
ByteMatrix byteMatrix;

记得初始化Texture2D。

1
2
3
4
void Start()
{
    _texure2d = new Texture2D(_width, _height);
}

下面我们用一下文本输入框作为二维码的信息来源,再添加一个按钮作为触发。发明一个MultiFormatWriter用于二维码写入用,用其encode方法生成一个ByteMatrix类。再用ByteMatrix的方法ToBitmap成生bitmap对象,最后得到bitmap的数组再赋值于texture2d。在这里我定义了一个ImageToByte提取bitmap的数组。
因为是UI事件,所以我们把代码写到OnGUI中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void OnGUI()
{
 
    input = GUI.TextField(new Rect(100, 50, 100, 40), input);
    if (GUI.Button(new Rect(100, 100, 100, 40), "生成"))
    {
 
            byteMatrix = new MultiFormatWriter().encode(input, BarcodeFormat.QR_CODE, _width, _height);
            _texure2d.LoadImage(ImageToByte(byteMatrix.ToBitmap()));
            _success = true;
 
    }
 
    //画图
    if (_success) GUI.DrawTexture(new Rect(100, 300, 300, 300), _texure2d);
}
1
2
3
4
5
static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

PS:

    1. zxing是提供了项目源码,所以我们要把整个项目下载下来,我是下载ZXing-2.1.zip。之后解压,然后编译它的csharp目录下的代码。
    2. 也许zxing中文会显示乱码,这时用“DEFAULT_BYTE_MODE_ENCODING ”查找整个项目。然后把 System.String DEFAULT_BYTE_MODE_ENCODING = “ISO-8859-1″的ISO-8859-1改为UTF-8。

GJM : Unity3D结合ZXING制作二维码识别的更多相关文章

  1. Android二维码识别 开源项目ZXing的编译

    Android二维码识别 开源项目ZXing的编译 Android端的条形码/二维码识别功能 因为手机端的输入不是很方便,所以条形码/二维码的扫描是一种很有效的解决手段. 比较流行的手机应用中,常用的 ...

  2. 提高zxing生成二维码的容错率及zxing生成二维码的边框设置

    最近做了一个项目要生成二维码,跟几年前不同,最近大家都喜欢在二维码中间加logo. 加logo倒是不难,两个图片叠一起就是了,但是遇到一个新问题,logo加得太大的话,会导致二维码扫描不出来;加的太小 ...

  3. 实例源码--ZXing识别条形码和二维码识别源码

      下载源码 技术要点: 1.ZXing库的 使用 2.识别条形码和二 维码 3.自定义视图 4.源码带有非常详 细的中文注释 ...... 详细介绍: 1.ZXing库 ZXing是个很经典的条码/ ...

  4. 【转】Android平台下利用zxing实现二维码开发

    http://www.cnblogs.com/dolphin0520/p/3355728.html 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描 ...

  5. Python zxing 库解析(条形码二维码识别)

    各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...

  6. (转)ZXing解析二维码

    1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImag ...

  7. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  8. [置顶] xamarin android使用zxing扫描二维码

    好久没写了,这片文章篇幅不长,概述一下在xamarin android中用 ZXing.Net.Mobile库扫描二维码读取url的示例.扫码支付,扫码登录,App上各种各样的扫码,好像没个扫码的就有 ...

  9. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

随机推荐

  1. asp.net mvc 使用ajax请求 控制器 (PartialViewResult)分部的action,得到一个分部视图(PartialView)的HTML,进行渲染

    在asp.net mvc 使用ajax请求获取数据的时候,我们一般是返回json或者xml,然后解析这些数据进行渲染,这样会比较麻烦,可以请求一个 分部action,返回一个分部视图 直接可以渲染,不 ...

  2. react7 react 三目运算

    <body><!-- React 真实 DOM 将会插入到这里 --><div id="example"></div> <!- ...

  3. JavaScript 对象的基本知识

    js对象和属性的基本定义 (function(){ $(document).ready(function(){ return "object define"; //创建对象实例 v ...

  4. 【WP开发】在手机屏幕点亮时播放声音

    今天说的内容有点流氓,请诸君在开发应用时谨慎使用. 那么,这活儿到底有多流氓呢? 先介绍一下要实现的功能:当用户按电源键(也可以是双击屏幕)点亮手机的屏幕时播放一下短音乐,而且应用程序可以不在前台运行 ...

  5. java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况

    /* 样例1: class Parent{ int num = 3; } class Child extends Parent{ int num = 4; } */ /* 样例2: class Par ...

  6. IEE数据库安装向导

    RHEL 5用rpm包,直接安装后配置数据及缓存目录即可. RHEL 6用tar包+配置文件,本文是在RHEL 6上安装IEE的向导. ①上传infobright-4.0.6-x86_64.tar包和 ...

  7. 轻松自动化---selenium-webdriver(python) (十)

    本节重点 处理下拉框 switch_to_alert() accept() 下拉框是我们最常见的一种页面元素,对于一般的元素,我们只需要一次就定位,但下拉框里的内容需要进行两次定位,先定位到下拉框,再 ...

  8. 可视化工具solo show-----Processing Prefuse show

    继上篇<可视化工具solo show>罗列出一些主要基于Java开发的软件.插件之后,又仔细揣摩了下哪些可以为我所用. 一番端详之后,准备挑出其中Processing和Prefuse两位大 ...

  9. 精品资源:40个实用的 PSD 贴纸模板《下篇》

    贴纸经常被网页设计师用于为标注网站中的不同元素,以此吸引访客的注意.此外,使用贴纸也使网站更具吸引力.虽然设计者可以使用 Photoshop 制作贴纸,但他们也可以利用从互联网上下载现成的模板.这些模 ...

  10. Elasticsearch入门必备——ES中的字段类型以及常用属性

    使用Elasticsearch时,了解字段的概念,是必不可少的.毕竟无论是es还是传统的数据库,都无法弱化字段的类型. 背景知识 在Es中,字段的类型很关键: 在索引的时候,如果字段第一次出现,会自动 ...