生成显示二维码

最近同事提出一个需求:需要通过os 显示带有版本信息的二维码,手机扫描就知道版本。主要为了解决整机没有串口交互也没有调试口。
直接在网上找到了开源QRcode ,这是一个应用比较广泛的二维码生成和解析程序,基本app 网站都是使用他的库,有jave c c++ 等各种版本,由于我是要在自家芯片的嵌入式linux 系统上使用,所以就找了单片机版本的的一套开源代码,中间仅使用C库函数,可以直接编译成linux 应用使用。
添加一个main函数进行调用

#include "QR_Encode.h"

int main(void){
    
    EncodeData("aaa");
    int i,j;
    for(i=0;i<MAX_MODULESIZE;i++){
        for(j=0;j<MAX_MODULESIZE;j++){
            if(m_byModuleData[i][j] == 1)
             printf("1");
            else
            printf("0");
        }
        printf("\n");
    }

    return 0;
}

EncodeData(“aaa”); 中是要编码的信息。
m_byModuleData[i][j] 是编码出来的结构体,其中的0和1 就对应二维码的黑白颜色。
编译成linux 应用,执行另存为文件可以输出重定向,

./main > test.txt

另存成文件test.txt结果是这样的:
111111101111101111111000000000000
100000101111001000001000000000000
101110101101101011101000000000000
101110100010001011101000000000000
101110101111001011101000000000000
100000101111001000001000000000000
111111101010101111111000000000000
000000001101000000000000000000000
001000111100011110111000000000000
111100011001000001011000000000000
010010101000000010011000000000000
111100011000011110000000000000000
101011110010100100101000000000000
000000001000011110000000000000000
111111101101101011011000000000000
100000100000011110000000000000000
101110100010100100101000000000000
101110100110011100000000000000000
101110101010001011011000000000000
100000100110011001011000000000000
111111100110111110101000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
000000000000000000000000000000000
隐约能看到二维码的样子吧。
要把它弄成图片,我就用matlab 画图来实现了,osd 的同事不熟。

 fid = fopen('test.txt','r');
%   img = fread(fid);
   img = fread(fid );
 [a,b] = size(img);
 len = a;
 a = a/35;
 
 c = zeros(33,34);
 for l=1:33
     for h=1:34
         zz = (l-1)*34+h;
          z = sprintf('%d',img(zz));
        if img(zz) == 49
%              disp(1);
            c(l,h) = 1;
         else
            c(l,h) = 0;
         end
     end
 end
 c = c*255;
 imshow(c);

显示的结果是:
在这里插入图片描述
也可以做2x2 或者4x4 的数字放大,比较简单就不做了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值