将矩阵打印为黑白方块,类似于 QR 码
Print matrix as black and white squares, similar to QR code
我正在用 C++ 实现微型 QR 码生成器,我想打印最终矩阵,该矩阵生成为一组黑白方块,看起来像真正的 QR 码。我的矩阵由 1
和 0
的整数值组成(我的代码中有一个原因,而不是使用布尔值),我想打印一个黑色方块作为值 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 这样的东西上看起来不错,它有白色背景而不是大多数终端通常的黑色背景。
一种可能的替代方法是使用 space 字符代表 0,使用 Unicode 字符 'FULL BLOCK' (U+2588) █ 代表 1。
(Board[i][j] == 0) ? " " : "\u2588\u2588";
你可以看到它的样子 here 我还使用了一对每个字符来考虑字体纵横比。
我在我的程序中使用了比完整块和空格更小的块符号,请看这里:https://github.com/Y2Z/qr
█、空格、▀、▄ 使生成的 QR 码比仅使用 █ 和空格生成的 QR 码紧凑四倍。
希望对您有所帮助!
我正在用 C++ 实现微型 QR 码生成器,我想打印最终矩阵,该矩阵生成为一组黑白方块,看起来像真正的 QR 码。我的矩阵由 1
和 0
的整数值组成(我的代码中有一个原因,而不是使用布尔值),我想打印一个黑色方块作为值 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 这样的东西上看起来不错,它有白色背景而不是大多数终端通常的黑色背景。
一种可能的替代方法是使用 space 字符代表 0,使用 Unicode 字符 'FULL BLOCK' (U+2588) █ 代表 1。
(Board[i][j] == 0) ? " " : "\u2588\u2588";
你可以看到它的样子 here 我还使用了一对每个字符来考虑字体纵横比。
我在我的程序中使用了比完整块和空格更小的块符号,请看这里:https://github.com/Y2Z/qr
█、空格、▀、▄ 使生成的 QR 码比仅使用 █ 和空格生成的 QR 码紧凑四倍。
希望对您有所帮助!