我正在开发一个嵌入式应用程序,其中一个设备在LCD屏幕上生成二维码。
代码生成部分似乎工作得很好,但我在解码它时似乎遇到了一些问题。
我通过函数生成二维码
QRcode *qr = QRcode_encodeString8bit("http://some/url/", 0, QR_ECLEVEL_Q);然后将其转换为可由图像库读取的格式以显示在屏幕上。然而,虽然Android上的"QR Droid“应用程序可以很好地读取它并将我发送到URL,但另一个名为"Qr条形码扫描器”的应用程序似乎无法识别代码,尽管它似乎可以检测到对齐点。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;
}
}发布于 2012-07-16 12:55:23
@smparkes我不确定二维码被翻转了。zxing可以读取它,并且它不允许镜像代码(不能没有TRY_HARDER)。
是的,有效二维码的镜像永远不会有效;旋转是有效的。我想,如果这个库总是生成无效的二维码,我会感到惊讶。QR Droid也是基于zxing的,所以如果它也读取这些无效代码,那将会很惊讶。
但话又说回来,其他一些证据表明,镜像是问题所在。
发布于 2012-10-25 16:05:20
在我的例子中,可以工作的代码(与输出相同结果的二维码生成器相比)如下所示
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");
}https://stackoverflow.com/questions/11495059
复制相似问题