c - libqrencode 生成一些 android/ios 阅读器无法读取的二维码

标签 c embedded qr-code

我正在开发一个嵌入式应用程序,设备可以在 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/

相关文章:

c++ - 从 MS 访问调用 dll 函数

c - malloc 调用的静态替换

C# 使用 ZXING.NET 解码真实图像中的 QRCODE

c - 由于从 -128 到 -1 的字符与从 +128 到 +255 的字符相同,那么使用 unsigned char 有什么意义呢?

c - 为什么我的 while 循环忽略 NULL 条件?

C - 不循环地递归查找子集和

c - 即使我将输出重定向到/dev/null,printf 仍然会产生成本吗?

c - 嵌入式编程中的输入和输出有什么区别?

java - 查找图片中的二维码并使用Zxing解码

iphone - 生成彩色二维码