我正在开发一个嵌入式应用程序,设备可以在 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;
}
}
最佳答案
在我的例子中,有效的代码(与输出相同结果的二维码生成器比较)看起来像这样
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");
}
关于c - libqrencode 生成一些 android/ios 阅读器无法读取的二维码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495059/