基于Linux的电子相册

项目简介:

在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值