将矩阵打印为黑白方块,类似于 QR 码

Print matrix as black and white squares, similar to QR code

我正在用 C++ 实现微型 QR 码生成器,我想打印最终矩阵,该矩阵生成为一组黑白方块,看起来像真正的 QR 码。我的矩阵由 10 的整数值组成(我的代码中有一个原因,而不是使用布尔值),我想打印一个黑色方块作为值 1 或值为 0 的白色方块。

我当前的代码(见下文或测试它 here)使用 Unicode 字符 \u2b1c\u2b1b 来获得与我想要的相似的结果,但它不够方由二维码扫描仪扫描。

代码

#include <iostream>
using namespace std;
int i,j;
int printPixels(int Board[11][11]){
    for (i=0;i<11;i++){
        for (j=0;j<11;j++)  cout << ((Board[i][j] == 0) ? "\u2b1c" : "\u2b1b");
        cout << endl;
    }
    return 0;
}
int main() {
    int a[11][11]={
        {1,1,1,1,1,1,1,0,1,0,1},{1,0,0,0,0,0,1,0,1,0,1},
        {1,0,1,1,1,0,1,0,1,1,0},{1,0,1,1,1,0,1,0,0,0,0},
        {1,0,1,1,1,0,1,0,1,1,1},{1,0,0,0,0,0,1,0,0,0,1},
        {1,1,1,1,1,1,1,0,1,1,1},{0,0,0,0,0,0,0,0,0,1,1},
        {1,1,0,0,1,1,1,0,0,1,0},{0,0,1,0,1,1,0,0,0,1,0},
        {1,1,1,1,1,0,0,1,1,1,1}
    };
    printPixels(a);
}

限制

一种可能的替代方法是使用 space 字符代表 0,使用 Unicode 字符 'FULL BLOCK' (U+2588) █ 代表 1。

(Board[i][j] == 0) ? "  " : "\u2588\u2588";

你可以看到它的样子 here 我还使用了一对每个字符来考虑字体纵横比。

我在我的程序中使用了比完整块和空格更小的块符号,请看这里:https://github.com/Y2Z/qr

█、空格、▀、▄ 使生成的 QR 码比仅使用 █ 和空格生成的 QR 码紧凑四倍。

希望对您有所帮助!