vuforia + zxing 解析二维码

拷贝下来 直接用。
using UnityEngine;
using System.Collections;
using System;
using Vuforia;
using System.Threading;
using ZXing;
using ZXing.QrCode;
using ZXing.Common;
using UnityEngine.SceneManagement;

public class CameraImageAccess : MonoBehaviour
{
    private Image.PIXEL_FORMAT m_PixelFormat = Image.PIXEL_FORMAT.GRAYSCALE;
    private bool m_RegisteredFormat = false;

    public bool reading;
    public string QRMessage;
    public UnityEngine.UI.Text labelQrc;
    Thread qrThread;
    //bool isQuit;
    private Color32[] c;
    private int W, H;
    Image QCARoutput;
    bool updC;
    bool gotResult = false;
    void Start()
    {

    }

    //void OnApplicationQuit()
    //{

    //}
    void OnEnable()
    {
        VuforiaBehaviour vuforiaBehaviour = (VuforiaBehaviour)FindObjectOfType(typeof(VuforiaBehaviour));
        if (vuforiaBehaviour)
        {
            vuforiaBehaviour.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated);
        }
        var isAutoFocus = CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);
        if (!isAutoFocus)
        {
            CameraDevice.Instance.SetFocusMode(CameraDevice.FocusMode.FOCUS_MODE_NORMAL);
        }
        //Debug.Log(String.Format("AutoFocus : {0}", isAutoFocus));

        if (!m_RegisteredFormat)
        {
            Vuforia.CameraDevice.Instance.SetFrameFormat(m_PixelFormat, true);

            m_RegisteredFormat = true;
        }

        qrThread = new Thread(DecodeQR);
        qrThread.Start();
    }
    void OnDisable()
    {
        Debug.Log("OnDisable");
        VuforiaBehaviour vuforiaBehaviour = (VuforiaBehaviour)FindObjectOfType(typeof(VuforiaBehaviour));
        if (vuforiaBehaviour)
        {
            vuforiaBehaviour.UnregisterTrackablesUpdatedCallback(OnTrackablesUpdated);
        }
        qrThread.Abort();
        qrThread = null;
    }
    public void OnTrackablesUpdated()
    {
        Vuforia.CameraDevice cam = Vuforia.CameraDevice.Instance;
        QCARoutput = cam.GetCameraImage(m_PixelFormat);
        if (QCARoutput != null)
        {
            reading = true;

            updC = true;
        }
        else
        {
            reading = false;
            Debug.Log(m_PixelFormat + " image is not available yet");
        }
    }

    void Update()
    {
        if (reading)
        {
            if (QCARoutput != null)
            {
                if (updC)
                {
                    updC = false;
                    Invoke("ForceUpdateC", 1f);//here we'll postpone next c update, this function literally just switches updC to true
                    if (QCARoutput == null)
                    {
                        return;
                    }
                    c = null;
                    c = ImageToColor32(QCARoutput);
                    if (W == 0 | H == 0)
                    {
                        W = QCARoutput.BufferWidth;
                        H = QCARoutput.BufferHeight;
                    }
                    QCARoutput = null;
                }
            }
        }

        //labelQrc.text = QRMessage;
        //if (gotResult) SceneManager.LoadScene(0);
    }
    void DecodeQR()
    {
        // create a reader with a custom luminance source
        var barcodeReader = new BarcodeReader { AutoRotate = false, TryHarder = false };
        barcodeReader.ResultFound += OnResultF;
        while (true)
        {
            //if (isQuit)//This one is used to be true in OnApplicationQuit() See ZXing's tutorial for more info
            //    break;
            if (reading && c != null)
            {
                try
                {
                    // decode the current frame
                    ZXing.Result result = barcodeReader.Decode(c, W, H);
                    c = null;
                    if (result != null)
                    {
                        QRMessage = result.Text;
                        //download = true;
                        //reading = false;
                        //Debug.Log(QRMessage);     

                    }
                }
                catch(Exception e)
                {
                    Debug.LogError(e.Message);
                }
            }
            else {

            }
            Thread.Sleep(200);
        }
    }
    void OnResultF(Result result)
    {
        Debug.Log(result.Text);
        gotResult = true;
        //SceneManager.LoadScene(0);
    }
    void ForceUpdateC()
    { //To set it to update later
        updC = true;
    }

    Color32[] ImageToColor32(Vuforia.Image a)
    {
        if (!a.IsValid()) return null;
        Color32[] r = new Color32[a.BufferWidth * a.BufferHeight];
        for (int i = 0; i < r.Length; i++)
        {
            r[i].r = r[i].g = r[i].b = a.Pixels[i];
        }
        return r;
    }
}

时间: 2024-10-05 05:06:54

vuforia + zxing 解析二维码的相关文章

(转)ZXing解析二维码

1 ZXing解析二维码 上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImageLuminanceSource类,该类可在google的测试包中找到,另外j2se中也有该类,你可以将该类直接拷贝到源码中使用,你也可以自己写个. 1.1 BufferedImageLuminanceSource类 package t1; import java.awt.Graphics2D; i

ZXing解析二维码

上一篇文件已经说过如何用ZXing进行生成二维码和带图片的二维码,下面说下如何解析二维码 二维码的解析和生成类似,也可以参考google的一个操作类 BufferedImageLuminanceSource类,该类可在google的测试包中找到,另外j2se中也有该类,你可以将该类直接拷贝到源码中使用,你也可以自己写个. import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.

Android zxing 解析二维码,生成二维码极简demo

zxing 官方的代码很多,看起来很费劲,此demo只抽取了有用的部分,实现了相机预览解码,解析本地二维码,生成二维码三个功能. 简化后的结构如下: 废话少说直接上代码: BaseDecodeHandler: package com.song.zxing.decode; import android.graphics.Bitmap; import android.os.Bundle; import com.google.zxing.BarcodeFormat; import com.google

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

场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好,而且支持的格式很多,当然也可以对二维码进行处理,效果个人感觉没有前两种好;ZXing对j2me,j2se,还有Android等支持也比较好,如果你是搞Android的或以后准备走Android,建议还是用zxing的比较好,毕竟都一个母亲(gool

zxing实现二维码生成和解析

zxing实现二维码生成和解析 博客分类: 二维码 zxing 二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/tree/zxing-3.0.0 Java代码   // 其中输出图像和读取图像的类在core包 MultiFormatReader MultiFormatWriter // 生成矩阵的类在javase的包里 MatrixToImageW

java zxing实现二维码生成和解析zxing实现二维码生成和解析

zxing实现二维码生成和解析 二维码 zxing 二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/tree/zxing-3.0.0 Java代码   // 其中输出图像和读取图像的类在core包 MultiFormatReader MultiFormatWriter // 生成矩阵的类在javase的包里 MatrixToImageWriter

使用zxing生成和解析二维码

二维码: 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的: 在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理: 二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息: 二维码相对于条形码的优势就是省空间: zxing简介: zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库

C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码

最近做项目需要解析二维码图片,找了一大圈,发现没有人去整理下开源的几个库案例,花了点时间 做了zxing,zbar和thoughtworkqrcode解析二维码案例,希望大家有帮助. zxing是谷歌开源的二维码库,zbar,thoughtworkQRcode也是开源的,三者之间比较各有优劣 下面通过一个案例demo源码,来认识学习下这三者的实际解码效果, 第一次上传demo源码,献丑了 zbar解析关键代码: Image primaryImage = Image.FromFile(fileNa

Java使用Zxing生成、解析二维码工具类

Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法. 1.二维码的生成 (1).将Zxing-core.jar 包加入到classpath下. (2).二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的; package com.qlwb.business.util; //导入省略... /** * 二维码工具类 * */ public class MatrixToLogoImageWriter { priva