0

我正在开发一个嵌入式应用程序,其中设备在 LCD 屏幕上生成 QR 码。

代码生成部分似乎工作得很好,但我似乎在解码它时遇到了一些麻烦。

我通过函数生成二维码

QRcode *qr = QRcode_encodeString8bit("http://some/url/", 0, QR_ECLEVEL_Q);

然后将其转换为图像库可以读取的格式以显示在屏幕上。然而,虽然 Android 上的“QR Droid”应用程序可以很好地读取它并将我发送到 URL,但另一个名为“Qr Barcode Scanner”的应用程序似乎无法识别代码,即使它似乎检测到对齐点。iOS 也是如此——有些应用程序读得很好,有些应用程序就像它不是代码一样。

这个问题的可能原因是什么?我尝试了不同的纠错级别,但事实并非如此。

提前感谢您的回复..

编辑:显然代码是水平翻转的。我更改了将其转换为 16 位图像的方式,并且它起作用了。我正在写一个代码片段以供将来参考,以防其他人偶然发现同样的问题。

QRcode *qr = QRcode_encodeString8bit(string, 0, QR_ECLEVEL_H);
int i, j;
for (i = 0; i < qr->width; i++) {
    for (j = qr->width - 1; j >= 0; j--) { //flipped this
        if (qr->data[(j * qr->width) + i] & 0x1)
            *(qr_img++) = COLOR_16BIT_BLACK;
        else
            *(qr_img++) = COLOR_16BIT_WHITE;
    }
}
4

2 回答 2

4

在我的情况下,有效的代码(与输出相同结果的二维码生成器相比)看起来像这样

QRcode *qr;
qr = QRcode_encodeString("ABC012345", 0, QR_ECLEVEL_H, QR_MODE_8, 1);

int i_qr, j_qr;
for (i_qr = 0; i_qr < qr->width; i_qr++) {
    for (j_qr = 0; j_qr < qr->width; j_qr++) { 
        if (qr->data[(i_qr * qr->width) + j_qr] & 0x1)
            printf("*");
        else
            printf(" ");
    }
    printf("\n");
}
于 2012-10-25T08:05:19.770 回答
0

@smparkes 我不确定二维码是否被翻转。zxing 读取它OK,并且它不允许镜像代码(不是没有TRY_HARDER)。

是的,有效二维码的镜像永远无效;旋转是。我想如果图书馆总是生成无效的二维码,我会感到惊讶。QR Droid 也只是基于 zxing,所以如果它不遗余力地读取这些无效代码,就会感到惊讶。

但话又说回来,其他一些证据表明镜像是问题所在。

于 2012-07-16T04:55:23.190 回答