Unity QRCode解码结果返回null

时间:2018-07-06 17:11:39

标签: c# unity3d zxing

我有一个C#/。Net应用程序,可以从磁盘上的图像解码多个QR码。我想在 Unity 内部执行此操作,因此我导入了zxing插件并修改了代码,使其现在使用Color32 []代替了Bitmap类(因为Unity不支持System.Drawing.Bitmap) 。以下是我在Unity中拥有的东西:

    var fileData = File.ReadAllBytes(filePath);
    Texture2D texture = new Texture2D(2,2);
    texture.LoadImage(fileData);

    var barcodeBitmap = texture.GetPixels32 ();
    LuminanceSource source = new Color32LuminanceSource (barcodeBitmap, texture.width, texture.height);

    IBarcodeReader reader = new BarcodeReader ();
    Result[] results = reader.DecodeMultiple (source);
    if (results != null)
    {
        foreach (Result result in results)
        {
            Debug.Log(result.Text);
        }
    }

现在的问题是,与以前相反,结果数组始终返回null,即使对于我已经测试过的.Net应用程序不为null的结果也是如此。任何建议将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:1)

如果要加载jpeg或png,它应该可以正常工作。 但是,用于bmp的LoadImage无法正常工作,它将为您返回null。 为了正确加载bmp类型的文件,您可以使用

private static readonly B83.Image.BMP.BMPLoader bmpImageLoader = new B83.Image.BMP.BMPLoader ();

然后通过以下方式加载它:

texture = bmpImageLoader.LoadBMP(filePath).ToTexture2D();

答案 1 :(得分:0)

一种选择是使用ZXing.NET NuGet

using ZXing;
using ZXing.Client.Result;
using ZXing.Common;
using ZXing.QrCode;

var QRreader= new ZXing.QrCode.QRCodeReader();
var barcodeBitmap = (Bitmap)Bitmap.FromFile(filePath);
var result = QRreader.decode(barcodeBitmap);
if (result != null)
{
   Debug.Log(result.Text);
}