Microduino bmp格式图像显示/zh

来自Microduino Wikipedia
Jialexd@foxmail.com讨论 | 贡献2016年3月11日 (五) 02:13的版本 BMPFile库的API
跳转至: 导航搜索

目的

把存储在SD卡内的bmp格式图像文件,通过TFT屏显示出来。支持显示图像深度有lbit、4bit、8bit、16bit、24bit及32bit;

设备

模块 数量 功能
Microduino-Core+/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-Module TFT/zh 1 显示模块
Microduino-Module SD/zh 1 SD模块
Microduino-Shield Cube-S2/zh 1 基于Microduino的扩展板
  • 其他硬件设备
元器件 数量 功能
1.27间距的8Pin导线 1 连接TFT模块

什么是bmp

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

bmp格式

典型的BMP图像文件由四部分组成:

  • 1:位图头文件数据结构,它包含BMP图像文件的类型、显示内容等信息;
  • 2:位图信息数据结构,它包含有BMP图像的宽、高、压缩方法,以及定义颜色等信息;
  • 3:调色板,这个部分是可选的,有些位图需要调色板,有些位图,比如真彩色图(24位的BMP)就不需要调色板;
  • 4:位图数据,这部分的内容根据BMP位图使用的位数不同而不同,在24位图中直接使用RGB,而其他的小于24位的使用调色板中颜色索引值。

bmp类型

位图一共有两种类型,即:设备相关位图(DDB)和设备无关位图(DIB)。DDB位图在早期的Windows系统(Windows 3.0以前)中是很普遍的,事实上它也是唯一的。然而,随着显示器制造技术的进步,以及显示设备的多样化,DDB位图的一些固有的问题开始浮现出来了。比如,它不能够存储(或者说获取)创建这张图片的原始设备的分辨率,这样,应用程序就不能快速的判断客户机的显示设备是否适合显示这张图片。为了解决这一难题,微软创建了DIB位图格式。 设备无关位图 (Device-Independent Bitmap) DIB位图包含下列的颜色和尺寸信息:

  • 原始设备(即创建图片的设备)的颜色格式。
  • 原始设备的分辨率。
  • 原始设备的调色板
  • 一个位数组,由红、绿、蓝(RGB)三个值代表一个像素。
  • 一个数组压缩标志,用于表明数据的压缩方案(如果需要的话)。

存储方式

在BMP文件中,如果一个数据需要用几个字节来表示的话,那么该数据的存放字节顺序为“低地址村存放低位数据,高地址存放高位数据”。

位图数据

位图数据在文件中的排列顺序是从左下角到右上角,以行为主序排列的。也就是图像显示第一行的数据放到文件的位图数据的最后一行,图像显示第二行的数据放到文件的位图数据倒数第二行,以此类推。

对齐规则

Windows默认的扫描的最小单位是4字节,如果数据对齐满足这个值的话对于数据的获取速度等都是有很大的增益的。 因此,BMP图像顺应了这个要求,要求每行的数据的长度必须是4的倍数,如果不够需要进行比特填充(以0填充),这样可以达到按行的快速存取。这时,位图数据区的大小就未必是 图片宽×每像素字节数×图片高 能表示的了,因为每行可能还需要进行比特填充。

原理图

BMPFile库的API

  • 参数:File
  • 返回值:bool
  • 作用:从SD卡打开图像文件,打开成功时返回true,否则返回false;
  • bool open(File &file);


  • 参数:char*
  • 返回值:bool
  • 作用:从SD卡打开图像文件,打开成功时返回true,否则返回false;
  • bool open(char* fileName);


  • 参数:无
  • 返回值:无
  • 作用:关闭图像文件;
  • void close(void);


  • 参数:Adafruit_ST7735 *,int16_t ,int16_t
  • 返回值:无
  • 作用:在TFT屏显示图像文件的内容;
  • void draw(Adafruit_ST7735 *dev, int16_t x, int16_t y);


  • 参数:无
  • 返回值:图像的宽度
  • 作用:获取图像的宽度
  • uint16_t getWidth();


  • 参数:无
  • 返回值:图像的高度
  • 作用:获取图像的高度
  • uint16_t getHeight();


  • 参数:uint16_t
  • 返回值:无
  • 作用:设置颜色背景,仅用于32bit图像深度;
  • void setBackgroundColor(uint16_t color);


  • 参数:无
  • 返回值:背景的颜色
  • 作用:获取背景的颜色;
  • uint16_t getBackgroundColor(void);

程序

调试

步骤一:

把core+、模块和底板堆叠在一起,并用8Pin线将底板与TFT模块连接一起。

步骤二:

将picture文件夹下的图片放到SD卡内。

步骤三:

打开程序并下载到core+,之后就可以看到TFT屏图像显示。

结果

视频