c++ - 将矩阵打印为黑白方 block ,类似于 QR 码

标签 c++ arrays matrix unicode qr-code

我正在用 C++ 实现一个微型 QR 码生成器,我想打印生成为一组黑白方 block 的最终矩阵,使其看起来像一个真正的 QR 码。我的矩阵由 10 的整数值组成(我的代码中有一个原因,而不是使用 bool 值)我想打印一个黑色值为 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);
}

限制

  • 我只能使用 ASCII 或 Unicode 字符来执行此操作,而不能使用任何绘图库或包(原因很复杂,但这是我的规范)。
  • 我需要实现尽可能独立于平台,并且看起来足够好以在可能的情况下使用通用二维码扫描仪进行扫描。
  • 我希望它在 Ideone 这样的东西上看起来不错,具有白色背景,而不是大多数终端通常的黑色背景。

最佳答案

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

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

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

关于c++ - 将矩阵打印为黑白方 block ,类似于 QR 码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38877434/

相关文章:

c++ - 如何使用 C++ 在 Node 中编辑歌曲元数据?

C++ Hooking kernel32.dll OpenProcess 走弯路

java - 将元素添加到二维数组的特定部分

r - 如何在 R 中创建精确匹配的二进制矩阵

java - 寻找 3x3 矩阵的余因子和行列式 (java)

c++ - 为什么 PyGILState_Release 抛出致命的 Python 错误

c++ - 在闭源库中使用 STL

python - 创建 numpy 数组时 dtype=object 是什么意思?

java - 检查数组是否对称

c# - 矩阵结构给出错误的输出