GJM : Unity3D结合ZXING制作二维码识别
二维码比起条形码更有自身的优势,比如它高达千个字符的容量、纠错能力及汉字支持。二维码现在在国内已经有不少领域应用到,特别是在网站及移动端中更是应用得更加广泛。
最近的项目中也需要用到二维码去显示一些摘要信息,然后用手机或者其它客户端显示出来。网上其实也不少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:
- zxing是提供了项目源码,所以我们要把整个项目下载下来,我是下载ZXing-2.1.zip。之后解压,然后编译它的csharp目录下的代码。
- 也许zxing中文会显示乱码,这时用“DEFAULT_BYTE_MODE_ENCODING ”查找整个项目。然后把 System.String DEFAULT_BYTE_MODE_ENCODING = “ISO-8859-1″的ISO-8859-1改为UTF-8。
GJM : Unity3D结合ZXING制作二维码识别的更多相关文章
- Android二维码识别 开源项目ZXing的编译
Android二维码识别 开源项目ZXing的编译 Android端的条形码/二维码识别功能 因为手机端的输入不是很方便,所以条形码/二维码的扫描是一种很有效的解决手段. 比较流行的手机应用中,常用的 ...
- 提高zxing生成二维码的容错率及zxing生成二维码的边框设置
最近做了一个项目要生成二维码,跟几年前不同,最近大家都喜欢在二维码中间加logo. 加logo倒是不难,两个图片叠一起就是了,但是遇到一个新问题,logo加得太大的话,会导致二维码扫描不出来;加的太小 ...
- 实例源码--ZXing识别条形码和二维码识别源码
下载源码 技术要点: 1.ZXing库的 使用 2.识别条形码和二 维码 3.自定义视图 4.源码带有非常详 细的中文注释 ...... 详细介绍: 1.ZXing库 ZXing是个很经典的条码/ ...
- 【转】Android平台下利用zxing实现二维码开发
http://www.cnblogs.com/dolphin0520/p/3355728.html 现在走在大街小巷都能看到二维码,而且最近由于项目需要,所以研究了下二维码开发的东西,开源的二维码扫描 ...
- Python zxing 库解析(条形码二维码识别)
各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...
- (转)ZXing解析二维码
1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImag ...
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- [置顶]
xamarin android使用zxing扫描二维码
好久没写了,这片文章篇幅不长,概述一下在xamarin android中用 ZXing.Net.Mobile库扫描二维码读取url的示例.扫码支付,扫码登录,App上各种各样的扫码,好像没个扫码的就有 ...
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
随机推荐
- OpenCascade Application Framework Introduction
OpenCascade Application Framework Introduction eryar@163.com 本教程介绍了Open CASCADE程序框架(Application Fram ...
- C#多线程之旅(1)——介绍和基本概念
原文地址:C#多线程之旅(1)——介绍和基本概念 C#多线程之旅目录: C#多线程之旅(1)——介绍和基本概念 C#多线程之旅(2)——创建和开始线程 C#多线程之旅(3)——线程池 C#多线程之旅( ...
- 在使用androidStudio中所遇到的错误
错误如下所示 Error:Execution failed for task ':app:processDebugResources'.> com.android.ide.common.proc ...
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- Java魔法堂:类加载机制入了个门
一.前言 当在CMD/SHELL中输入 $ java Main<CR><LF> 后,Main程序就开始运行了,但在运行之前总得先把Main.class及其所依赖的类加载到JVM ...
- java中的hashcode()和equals()
equals()和hashcode()都继承自object类. equals() equals()方法在object类中定义如下: public boolean equals(Object obj) ...
- Servlet生命周期中的service方法分析
问题ServletLifeCycle中的service方法内,有super.service(request, response); 会执行this.doGet(HttpServletRequest r ...
- 把DataTable转换为泛型List<T>或是JSON
在开发ASP.NET Web API或ASP.NET MVC时,我们从数据库得到的数据往往是DataSet或是DataTable.为了能让前端JQuery能方便使用至这些数据,我们需要把这些数据转换为 ...
- 提高生产性工具(四) - XML数据库的尝试
首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大 ...
- LocalDB:微软的新生代轻量级数据库
什么是LocalDB 随着SQL Server 2012的发布,LocalDB跃入我们的视线,它可以被看做是SQL Server Express的轻量级版本.LocalDB专门为开发人员创建,它非常易 ...