项目简介:
在Linux系统中,利用LCD和触摸屏模拟器,显示某文件夹(相册)中的bmp和jpg图片,鼠标点击可切换上一张、下一张,同时,利用madplay播放器播放音乐。
环境搭载:
所用软件以及工具如下:
1.VMware Workstation 16 Play搭载Ubuntu18.04的Linux操作系统。
2.使用VScode代码编写软件,配置好C语言开发环境。
3.Linux系统中:
(1)安装LCD和触摸屏模拟器。
(2)移植libjpeg开源库(用于解压jpg格式文件)。
(3)安装madplay播放器。
核心代码:
首先,运行LCD模拟器,模拟一块分辨率为800*480的LCD屏幕,利用mmap函数将LCD设备文件映射到内存中,再通过内存指针plcd直接在内存中访问LCD文件,读取或写入文件内容。
void init_lcd()
{
//1. 打开LCD设备文件
int fd = open("/dev/ubuntu_lcd", O_RDWR);
if(fd == -1)
{
perror("open");
return ;
}
//2. 映射
plcd = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
}
bmp图片的显示:利用draw_bmp函数,读取bmp文件信息(文件宽、高、色深)得出像素数组的大小,通过显示像素数组,完成在bmp图片在LCD上的显示。
//显示 像素数组
void draw_image(int x0,int y0,int width, int height , const unsigned char image[])
{
int i,j,k=0;
int color;
for(i=height;i>=0;i--)
for(j=0;j<width;j++)
{
color = image[k]|(image[k+1]<<8)|(image[k+2]<<16);
k = k+3;
draw_point(j+x0, i+y0, color);
}
}
//读bmp文件,获取 w,h,depth
int draw_bmp(int x0,int y0, const char *bmpfile)
{
unsigned char buf[4];
int fd = open(bmpfile,O_RDONLY);
if(fd < 0)
{
perror("open");
return -1;
}
read(fd, buf, 2);
if(buf[0]=='B' && buf[1]=='M')
{
printf("It's bmpfile\n");
}
else
return -1;
//1. 读出文件的 宽,高,色深&#x