fat库使用和bmp图片解码

前言

FAT系统是当前广泛使用的读写sd卡和U盘等存储设备的轻量文件系统,本文介绍如何使用fat读取sd卡的bmp文件并实现lcd显示。

一、fat和bmp是什么?

如前言所述,fat为一轻量级文件系统,广泛用于读取外部存储设备。bmp为图片的一种格式,一个合格的计算机学者应当任何时候都应该了解任何多媒体文件以及计算机上的任何东西在硬件上其实都是0101二进制码,因此图片的本质也就是一串很长的二进制码而已,所以所谓对图片的解码就是拿到图片的二进制码然后放到屏幕上显示而已。

二、使用步骤

1.引入库

FAT为一个通用的lib库,学者可自行查找使用,重点是要学会其中库函数的使用。

在这里插入图片描述
FAT lib库

其中该库中几个重点函数的使用掌握了基本上可以解决大部分读写需求。
f_mount(&fs,“0:”,1); //挂载,0代表为SD卡
f_open(&file, filename, FA_READ|FA_OPEN_ALWAYS); //打开文件
f_read(&file, header, 54, &Br); //读取文件内容,54字节为bmp图片格式文件投信息

其他函数学者可自行查阅相关资料和到库函数中查看相关源码逻辑。

2.读取BMP格式数据并解析

代码如下:

 //读取 BMP 文件头
    unsigned char header[54];
    res = f_read(&file, header, 54, &Br);
		if(res == FR_OK)
		{
				printf("SD卡文件读取成功!\r\n");				
		}
		
    printf("header文件读取成功!内容为:%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x \r\n", 
		 header[0],header[1],header[2],header[3],header[4],header[18],header[19],header[20],header[21]);

    // 解析 BMP 信息头
    int width = *(int*)&header[18];
    int height = *(int*)&header[22];
    int bitCount = *(short*)&header[28];
		
	printf("width, height,%02x,%02x \r\n", width,height);

其中文件头的第18,19,20,21字节代表图片的宽渡,22,23,24,25代表图片的高度,前5个字节,即第0,1,2,3,4字节代表图片的格式和格式版本。
bitCount代表图片中每个像素需要占的字节数,大多数都是24位,因此屏的显示像素如果是RGB565,还需要把24位转为16位的像素占位数来显示。

//24位色转18位色
#define RGB565(r, g, b) (((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3))

将得到的rgb565位色送屏显示,即可显示出对应的bmp格式图片。

总结

这个小功能的实现本身不难,主要在于对于FAT和bmp格式数据的熟悉,从而可以实现bmp格式图片到单片机屏幕上的显示。

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值