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