以前看到有些同学的项目,在ARM板上接着的LCD屏幕上播放动画,效果十分酷炫。后来自己也实现了,其基本无非就是控制LCD屏幕显示图片。以下就以24位图为例,介绍让LCD显示图片的方法。24位图是指由分别用8位二进制来表示图像B、G、R值的图片,亦即每个像素点都由24位组成。
环境:ARM Cortex开发板(预装有Linux系统),PC(ubuntu)
首先准备一张图片,可以菜单栏打开画图工具,调整图片大小至适合LCD尺寸,由于我手上的是800*480的LCD,故选择800*480的画布作图,并保存为24位图。
示例图片:
要注意的是,LCD屏幕显示是32位的,即αRGB(多了一个透明度),而我们所要显示的bmp位图是24位且为BGR的,这么一来,我们至少就要解决两个问题:
一个是思考 *如何将24位扩展到32位,另一个问题则是**如何将BGR调转顺序为RGB。
按计算所用位图的文件大小本应该是800*480*4=1152000字节的,但是由于图片实际上还存储着文件头信息,所以实际大小要再多出54个字节,这是读取图片时需要注意的。文件头信息跟我们需要显示的像素点无关,故在读取图片信息并显示时我们需要思考***如何只截取像素点信息。
另外,LCD的显示与图片的存储是上下颠倒的,所以还要****将图片上下调转再显示。
总体来说,实现思路如下:
①访问图片及LCD
②处理图片,包括截取有用的数据、扩展位、调换RGB存储顺序、上下调转
③将图片写入LCD
④回收图片及屏幕资源
首先从IO目录操作开始:(打开目录 -> 进入目录 -> 读取目录 -> 关闭目录)
需要调用到的IO函数:
目录IO
opendir
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
closedir
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
chdir
#include <unistd.h>
int chdir(const char *path);