Linux音乐电子相册(相册部分)

//编译后的程序需与图片放置于同一文件夹,开始、退出界面图片在上一级目录,具体路径请自行配置

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>  //mmap();   munmap();
#include <linux/input.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <dirent.h>
#include <signal.h>  //SIGCHLD变量头文件
#include <pthread.h>

#define HEIGHT 480  //屏幕分辨率
#define LENGTH 800

#define DAEMON 120

#define PICDIR "/usr/lcd/gal"  //图片路径
#define PICNUM 9  //BMP图片数目
#define THNUM 4  //线程数
#define BEGIN "../pic0.bmp"  //开始界面图片路径
#define END "../pic9.bmp" //退出界面图片路径

#define LCD "/dev/fb0"  //LCD设备路径
#define KEY "/dev/event1"  //键盘设备路径

#define UPS SIGRTMIN+1  //上一张
#define DOWNS SIGRTMIN+2  //下一张
#define BEGINS SIGRTMIN+3  //开始
#define QUITS SIGRTMIN+4  //退出
#define RETURN SIGRTMIN+4  //返回

#define ESC 1  //各个按键的键值
#define HOME 2
#define POWER 3
#define ENTER 96
#define UP 103
#define DOWN 108
#define LEFT 105
#define RIGHT 106

struct input_event key_value;

int isEnter = 0;  //标记是否打开程序
int isOpen = 0;  //标记是否打开图片
int pageSum = 0;  //标记总页数
int page = 1;  //标记当前页号,从1开始
int choice = 0;  //标记选中哪一张图片(0-1-2-3)

FILE* bmp[PICNUM];
FILE* bmpEND;
FILE* bmpBEG;
int* fb_mem;
char buff[LENGTH * HEIGHT * 3];

pid_t pptpid;
int pptfd[2];

void DrawLCD(FILE* bmps, int x1, int x2, int y1, int y2, int z1, int z2) {  //按给定参数绘制图片
	/* x1:x起始位置;  x2:x结束位置;  y1:y起始位置;  y2:y结束位置;  z1:行偏移位置;  z2:列偏移位置
	 * 函数作用:从(x1, y1)到(x2, y2)绘制图片bmps
	 * 横向每(z1 + 1)个像素并为一个,纵向每(z2 + 1)行并为一行, z1、z2需配合x1、x2、y1和y2 */
	int x = 0;
	int y = 0; 
	int i = 0;
	fseek(bmps, 54, SEEK_SET);
	fread(buff, LENGTH * HEIGHT * 3, 1, bmps);	
	for (y = y2; y >= y1; y--) {
		for (x = x1; x <= x2; x++) {
			*(fb_mem + y * LENGTH + x) = (buff[i] << 0 | buff[i + 1] << 8 | buff[i + 2] << 16);
			i += 3 * (z1 + 1);
		}
		i += z2 * (3 * LENGTH);
	}
}

void toPage() {  //按页号将四张图片输出为一张
	if (((page - 1) * 4) > PICNUM || page <= 0) {  //超出图库范围则报错
		perror("Page Out Of Range\n");
		return;
	} else {
		//Read((0,0)~(399,239))
		DrawLCD(bmp[4 * (page - 1)], 0, LENGTH / 2 - 1, 0, HEIGHT / 2 - 1, 1, 1);  //(0, 0) -> (LENGTH / 2 - 1, HEIGHT / 2 - 1), 偏移像素1,偏移行数1
		
		//Read((400,239)~(799,239))
		if ((4 * (page - 1) + 1) < PICNUM) {
			Dr
  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值