使用qrencode库生成二维码bmp图片
  sjQkI9UAtNrP 2023年11月02日 30 0

1、下载安装git

可以使用国内的淘宝npm镜像下载,网址: https://npm.taobao.org/mirrors/git-for-windows/

 

2、配置xshell 使用git及相关命令

使用qrencode库生成二维码bmp图片_qrcode生成

 

3、git clone  https://github.com/nayuki/QR-Code-generator.git,获取c头文件与接口

使用qrencode库生成二维码bmp图片_位图_02

4、解析BMP,根据qr库生成图像数据填入

a、

typedef struct
{
    uint16_t type;  //位图文件的类型,必须为BM(1-2字节)
    uint32_t size;  //位图文件的大小,以字节为单位(3-6字节,低位在前)
    uint16_t reserved1;  //位图文件保留字,必须为0(7-8字节)
    uint16_t reserved2;  //位图文件保留字,必须为0(9-10字节)
    uint32_t off_bits;  //位图数据位置的地址偏移,即起始位置,以相对于位图(11-14字节,低位在前)
}__attribute__ ((packed)) bmp_file_header_t;

 

typedef struct
{
    uint32_t size;        //定义以下用来描述影像的区块(BitmapInfoHeader)的大小,即本结构所占用字节数,它的值是:40
    int32_t width;        //位图宽度,以像素为单位
    int32_t height;        //位图高度,以像素为单位
    uint16_t planes;        //保存所用彩色位面的个数。不经常使用
    uint16_t bit_count;        //保存每个像素的位数,它是图像的颜色深度。常用值是1(双色灰阶)、4(16色灰阶)、8(256色灰阶)和24(彩色)。
    uint32_t compression;        /*
                    定义所用的压缩算法。允许的值是0、1、2、3、4、5。
                    0 - 没有压缩(也用BI_RGB表示)
                    1 - 行程长度编码 8位/像素(也用BI_RLE8表示)
                    2 - 行程长度编码4位/像素(也用BI_RLE4表示)
                    3 - Bit field(也用BI_BITFIELDS表示)
                    4 - JPEG图像(也用BI_JPEG表示)
                    5 - PNG图像(也用BI_PNG表示)
                        */
 
    uint32_t size_image;        //位图的大小(其中包含了为了补齐行数是4的倍数而添加的空字节),以字节为单位。这是原始位图数据的大小,不要与文件大小混淆
								//设置为BI_RGB时可为0
    uint32_t x_pels_permeter;        //位图水平分辨率,每米像素数
    uint32_t y_pels_permeter;        //位图垂直分辨率,每米像素数
    uint32_t clr_used;        //位图实际使用的颜色表中的颜色数
    uint32_t clr_important;        //位图显示过程中重要的颜色数,当每个颜色都重要时这个值与颜色数目(clr_used)相等
} bmp_info_header_t;


b、使用画图3d生成200 * 200 纯色图片,读取文件头进行对照

代码如下:

FILE* fp = fopen("./1.bmp", "rb+");
if(fp == NULL) {
	printf("fopen error\n");
	return 0;
}

bmp_file_header_t bmp_file_header;
bmp_info_header_t bmp_info_header;
fread(&bmp_file_header, 1, sizeof(bmp_file_header_t), fp);
fread(&bmp_info_header, 1, sizeof(bmp_info_header), fp);
fclose(fp);
读取数据:
type=BM
size=120054
reserved1=0
reserved2=0
off_bits=54
size=40
width=200
height=200
planes=1
bit_count=24
compression=0
size_image=0
x_pels_permeter=3780
y_pels_permeter=3780
clr_used=0
clr_important=0



5、根据qr库生成图像数据填入bmp数据部

fwrite(&bmp_file_header, 1, sizeof(bmp_file_header_t), fp);
fwrite(&bmp_info_header, 1, sizeof(bmp_info_header), fp);

int i, j;
unsigned short rgb_w = 0xFFFF;
unsigned short rgb_b = 0x0000;
for(i = 0;i <  size;i++){
  for(j = 0;j < size;j++) {
    if(qrcodegen_getModule(qrcode, j, i)){
      fwrite(&rgb_b, 2, 1, fp);
    }else{
      fwrite(&rgb_w, 2, 1, fp);
    }
  }
  fwrite("\0\0\0\0", width - size * 2, 1, fp);
}


6、效果图

使用qrencode库生成二维码bmp图片_qrcode生成_03












【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  X5zJxoD00Cah   2023年11月19日   38   0   0 管理系统githtml
  DF5J4hb0hcmT   2023年12月12日   31   0   0 服务器git
  eVzzROmRiJco   2023年11月19日   35   0   0 git版本库
  DF5J4hb0hcmT   2023年11月19日   37   0   0 git
sjQkI9UAtNrP
作者其他文章 更多