//编译后的程序需与图片放置于同一文件夹,开始、退出界面图片在上一级目录,具体路径请自行配置
#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
Linux音乐电子相册(相册部分)
最新推荐文章于 2024-08-09 16:20:47 发布
本文介绍了如何在Linux系统中创建音乐电子相册,结合移植后的MoboPlayer,实现将照片与音乐完美结合的相册功能。
摘要由CSDN通过智能技术生成