ZYNQ基础----使用SD卡保存图像(1)

1 BMP位图结构

  BMP是一种原始的三基色的图像格式,该格式的图像是未经过压缩的图像,BMP在FAT32文件系统的中的存储,有文件头,信息头等部分,这篇博客就是记录将BMP图像数据通过调用FAT32 文件系统的函数,从而写入到SD中。
  BMP位图可以有16位,24位,32位等,其中16位为RGB565,而24为通常为真彩色图片RGB888,32位图像,除了RGB通道外还有alpha通道,代表图像的透明度。
  一幅大小为1920*1080的图像的真彩色16进制的图像信息如下图所示:其中这幅图像是全白的,可以看到非FF部分是图像的文件头和信息头。其中文件头和信息头的定义如下:
在这里插入图片描述

1.1 BMP图像的文件头

  文件头和信息头是一字节对齐的。在文件头中,对应于BMP格式的图像,其各个字段有如下含义:

  1. 其第一个字(W)用来指示文件类型,也就是前面图像16进制的0x424d。
  2. 然后是DW用来指定文件的大小,文件大小是以字节为单位来表示的,以上图为例,图像大小为1920X1080,由于采用RGB888格式的真彩色图像,所以一幅图像的全部字节应该为图像所占字节加上文件头和信息头的全部信息。因此一幅图像所占空间为1920*1080*3 + 54 = 0x005EEC36,也就16进制中的3~6字节。
  3. 在之后2个W为保留字
  4. 头文件最后一个DW中,表示实际图像的起始数据距离图像文件的起始位置,上面所示的是0x36,也就是54个字节,正好是文件头和信息头的长度。
字段长度(字节)含义
bfType2文件类型,BMP格式为BM
bfSize4文件的大小以字节为单位
bfReserved12保留字,默认为0
bfReserved22保留字,默认为0
bfOffBits4从文件头到实际数据的偏移字节数

文件头在这里插入图片描述
在这里插入图片描述

1.2 BMP位图信息头

  在信息头中,其各个字段有如下含义

字段长度(字节)含义
biSize4信息头长度
biWidth4位图宽度
biPlanes2表示目标设备级别
biBitCount2一个像素的位数
biCompression4位图的压缩类型
BiSizeImage4位图大小
biXPixelPerMeter4位图水平分辨率
biYPixelPerMeter4位图垂直分辨率
biClrUsed4使用到的颜色
biClrImportant4颜色权重
  1. 第1个DW用来指示信息头的大小,在上图中是0x00000028也就是表示信息头的长度为40个字节。
  2. 第2个W用来表示位图的宽度,在上图中是0x00000780,也就是1920
  3. 第3个DW用来表示位图的高度,在上图中是0x00000438,也就是1080
  4. 接下来1个W表示目标设备级别,为1 0x0001;
  5. 接下来1个W是像素的位数,上面的图中是真彩色的所以为24 0x0018
  6. 接下来1个DW是位图的压缩类型,0x00000000表示不压缩
  7. 接下来1个DW是位图的大小,0x005EEC00 = 1920X1080X3
  8. 接下来1个DW是水平分辨率
  9. 接下来1个DW是垂直分辨率
  10. 接下来1个DW是实际使用颜色表中和的颜色数
    11.接下来1个是位图颜色的权重

信息头
在这里插入图片描述

在这里插入图片描述

2 SD卡与FAT32文件系统

  对于FAT32文件系统,其主页地址如下:FatFs文件系统主页,在该主页上能够找到常用的函数信息。
在这里插入图片描述
  对于要将BMP图像数据写入到SD中,常用的函数和步骤如下:
  首先挂载文件,然后打开文件,移动指针到文件指定位置,然后对文件进行读写,再进行同步,最后关闭文件。再官网中,对这些函数都有详细的介绍。

在这里插入图片描述

  对于想要将一幅BMP图像数据写入到SD中,需要按照上述步骤完成,指示在写入数据阶段,需要将BMP图像的文件头,信息头和数据依次填充进去。


参考:
V3 学院尤老师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值