2016-07-21 10 views
1

Я пытаюсь использовать единственную версию zxing для декодирования QR-кода.zxing QR decoding return null

Вот код:

текстуры = gameObject.GetComponent();

//texture.pixelInset = new Rect(Screen.width/4, Screen.height/4, Screen.width/2, Screen.height/2); 
    int imageSize = 100; 

    Texture2D text2D = new Texture2D(imageSize, imageSize); 

    text2D = (Texture2D)texture.texture; 

    Debug.Log("text2D.GetPixels32().Length " + text2D.GetPixels32().Length); 
    //Debug.Log("text2D.GetRawTextureData().Length " + text2D.GetRawTextureData().Length); 

    Color32LuminanceSource source = new Color32LuminanceSource(text2D.GetPixels32(), imageSize, imageSize);   
    RGBLuminanceSource source1 = new RGBLuminanceSource(text2D.GetRawTextureData(), imageSize, imageSize); 

    Debug.Log(GetString(source.Matrix)); 

    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 

    BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source1)); 

    QRCodeReader reader = new QRCodeReader(); 

    BarcodeReader reader1 = new BarcodeReader(); 

    DecodingOptions options = new DecodingOptions(); 

    options.TryHarder = true; 

    Result resultQRCodeReader = reader.decode(bitmap, options.Hints); 
    Result resultQRCodeReader1 = reader.decode(bitmap1, options.Hints); 

    Result resultBarcodeReader = reader1.Decode(source); 
    Result resultBarcodeReader1 = reader1.Decode(source1); 

Проблема - это все «результат» от обоих считывателей, и оба источника возвращают пустую строку. Я пробовал несколько примеров qrcode, который я тестировал в инструменте штрих-кода zxing - https://zxing.org/w/decode.jspx, и все они в порядке.

Не могу понять, что я делаю неправильно.

+0

Для какой объект этот сценарий присоединен к? Попробуйте распечатать несколько строк из массива text2D.GetPixels32(), чтобы узнать, есть ли у него хорошие значения. Вы также можете использовать text2D.GetPixels32() непосредственно в файле reader.decode (color32array, width, height) – mgear

ответ

0

Проблема была в том, что я установил размер текстуры на произвольный размер 100. Размер, передаваемый источнику яркости, должен соответствовать оригинальной текстуре. Таким образом, правильный код должен быть:

//texture.pixelInset = new Rect(Screen.width/4, Screen.height/4, Screen.width/2, Screen.height/2); 

Texture2D text2D = new Texture2D(imageSize, imageSize); 

int imageSize = text.height; 

text2D = (Texture2D)texture.texture; 

Debug.Log("text2D.GetPixels32().Length " + text2D.GetPixels32().Length); 
//Debug.Log("text2D.GetRawTextureData().Length " + text2D.GetRawTextureData().Length); 

Color32LuminanceSource source = new Color32LuminanceSource(text2D.GetPixels32(), imageSize, imageSize);   
RGBLuminanceSource source1 = new RGBLuminanceSource(text2D.GetRawTextureData(), imageSize, imageSize); 

Debug.Log(GetString(source.Matrix)); 

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 

BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source1)); 

QRCodeReader reader = new QRCodeReader(); 

BarcodeReader reader1 = new BarcodeReader(); 

DecodingOptions options = new DecodingOptions(); 

options.TryHarder = true; 

Result resultQRCodeReader = reader.decode(bitmap, options.Hints); 
Result resultQRCodeReader1 = reader.decode(bitmap1, options.Hints); 

Result resultBarcodeReader = reader1.Decode(source); 
Result resultBarcodeReader1 = reader1.Decode(source1); 

* при условии, что это сила 2 текстуры