libqrencode生成一些android / ios读者无法读取的qr代码

时间:2012-07-15 19:45:47

标签: c embedded qr-code

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

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

我通过函数

生成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;
    }
}

2 个答案:

答案 0 :(得分:4)

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

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");
}

答案 1 :(得分:0)

@smparkes我不确定QR码是否被翻转。 zxing读得很好,它不允许镜像代码(不是没有TRY_HARDER)。

是的,有效QR码的镜像永远不会有效;轮换是。如果图书馆一直只生成无效的QR码,我想我会感到惊讶。 QR Droid也是基于zxing的,所以如果它不顾一切地读取这些无效代码也会感到惊讶。

但是,其他一些证据表明镜像就是问题。