3

我发布这个是为了回答我自己的问题(以防万一其他人遇到这个问题。)

我正在使用 ZXing 的 Android 库生成一个二维码。二维码生成正确,我可以显示它(在使用QRCode.getMatrix().getArray().

此外,每当我为 设置纠错级别时Encoder,它都会忽略它并使用一些随机级别(通常是 Q 级别)进行编码。

我用这段代码生成二维码:

    二维码;

    尝试
    {
            code = Encoder.encode("...QRCODEDATA...", ErrorCorrectionLevel.L);
    }
    捕捉(WriterException ex)
    {
            log("获取二维码失败");
            返回空值;
    }
    

...然后,在获得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);
            }
        }

就是我最终的结果。


它看起来正确,但它不会扫描。少数二维码扫描仪仍会扫描它,但大多数不会。这是怎么回事?

4

2 回答 2

3

这个问题的答案:

二维码实际上是翻转的。虽然 ZXing 文档没有解释如何索引到 qrCode.getMatrix().getArray() 返回的数组,但它假定您将它索引为 [y][x],然后在 (x,y) 处绘制该单元格)。问题中发布的代码将数组索引为 [x][y],它沿 Y=X 线翻转图像。

生成的二维码看起来是合法的,但只有“智能”扫描仪才能检测到这种翻转并对其进行扫描。

纠错级别位也在对角,因此如果您要手动验证(查看图像右下角的几个位),库似乎忽略了纠错设置。

翻转二维码

于 2013-02-12T19:49:25.643 回答
2

不一定是您问题的答案,但您可以考虑使用 Google 的 QR 生成器。我用过它,它很简单。谷歌二维码

于 2013-02-12T16:35:30.377 回答