我正在开发一种嵌入式应用程序,其中设备在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;
}
}
答案 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的,所以如果它不顾一切地读取这些无效代码也会感到惊讶。
但是,其他一些证据表明镜像就是问题。