【发布时间】:2013-02-13 03:49:25
【问题描述】:
我发布此内容是为了回答我自己的问题(以防万一其他人遇到此问题。)
我正在使用 ZXing 的 Android 库生成二维码。 QR 码生成正确,我可以显示它(使用QRCode.getMatrix().getArray() 手动渲染后)。但是,生成的 QR 码无法使用 Android 市场上的大多数 QR 码阅读器进行扫描,包括 ZXing 的扫描仪本身!
此外,每当我为@987654321@ 设置纠错级别时,它都会忽略它并使用一些随机级别(通常是 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);
}
}
Here's 我最终得到了什么。
它看起来正确,但它不会扫描。少数二维码扫描器仍会扫描它,但
大多数不会。怎么回事?
【问题讨论】:
-
这个问题的答案:二维码其实是flipped。虽然 ZXing 文档没有解释如何索引到 qrCode.getMatrix().getArray() 返回的数组,但它假设您将它索引为 [y][x],然后在 (x,y) 处绘制该单元格)。问题中发布的代码将数组索引为 [x][y],它沿着 Y=X 线翻转图像。生成的二维码看起来是合法的,但只有“智能”扫描仪才能检测到这种翻转并对其进行扫描。 (纠错级别位也在对角。)
-
是的,我用我的扫描仪试过了。虽然原始版本给出了不可恢复的错误,但翻转版本可以毫无错误地读取。您应该将此作为答案并接受它,这样问题就不再开放了。
-
@Henry:只要我有足够的声誉,我就会将其作为官方答案(stackoverflow 对新用户非常严格)。