簡體   English   中英

Android zxing庫生成的QR碼不會掃描大多數QR碼掃描儀

[英]QR code generated by Android zxing library doesn't scan with most QR code scanners

我發布這個來回答我自己的問題(傳播這個詞以防其他人有這個問題。)

我正在使用ZXing的Android庫生成QR碼。 QR碼生成正常,我能夠顯示它(使用QRCode.getMatrix().getArray()手動渲染后。)但是,生成的QR碼不能掃描Android上的大多數QR碼閱讀器市場,包括ZXing的掃描儀本身!

此外,每當我為Encoder設置糾錯級別時,它都會忽略它並以一些隨機級別(通常是級別Q)進行編碼。

我用這段代碼生成QR碼:

QRCode code;

    try
    {
            code = Encoder.encode("...QRCODEDATA...", ErrorCorrectionLevel.L);
    }
    catch(WriterException ex)
    {
            log("Failed to obtain a QR code");
            return null;
    }

...然后,在獲得QRCode對象后,我像這樣繪制位圖:

byte[][] bitArray = qrCode.getMatrix().getArray();

  if(bitArray == null || bitArray.length < 1) return null; for(int x = 0;x < bitArray.length;x++) { for(int y = 0;y < bitArray[x].length;y++) { if(bitArray[x][y] == 0) bitmapDrawCell(x,y,WHITE); else bitmapDrawCell(x,y,BLACK); } } 

就是我最終的結果。


它看起來正確,但它不會掃描。 少數QR碼掃描儀仍會掃描它,但大多數不會。 這是怎么回事?

這個問題的答案:

QR碼實際上是翻轉的。 雖然ZXing文檔沒有解釋如何索引qrCode.getMatrix()。getArray()返回的數組,但它假定你將它索引為[y] [x],然后在(x,y)處繪制該單元格)。 問題中發布的代碼將數組索引為[x] [y],它沿Y = X線翻轉圖像。

由此產生的QR碼似乎是合法的,但只有“智能”掃描儀才能檢測到這種翻轉並進行掃描。

糾錯級別位也位於相反的角落,因此如果您要手動驗證(查看圖像右下角的幾位),則表明庫似乎忽略了糾錯設置。

翻轉QR碼

不一定是您問題的答案,但您可以考慮使用Google的QR生成器。 我用過它很簡單。 谷歌QR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM