2016-08-10 42 views
1

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

我当前的代码(见下文或测试here)使用Unicode字符\u2b1c\u2b1b以实现类似于我想要的结果,但它是不够的广场由一个QR码扫描仪进行扫描。

代码

#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字符做到这一点,没有任何图纸库或包(这个原因是复杂的,但这是我的规格)。
  • 我需要的实现是尽可能平台无关,并且看起来足够好,可以用普通的QR码扫描器进行扫描。
  • 我希望它看起来像Ideone,它有一个白色的背景,而不是大多数终端通常的黑色背景。
+1

您是否尝试过使用空格和\ u2588(可能加倍),如[这里](https://ideone.com/v6i7cZ)? –

+0

@Bob__这实际上是一个非常好的解决方案,你可以发布它作为答案,所以我可以接受它吗? –

回答

1

一个可能的选择是使用空格字符为0和Unicode字符“满块”(U + 2588)█代表1

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

你可以看到它的模样here在哪里还使用了一对每个字符来考虑字体宽高比。