开发板自动切换图片"/>
粤嵌gec6818开发板自动切换图片
粤嵌gec6818开发板自动切换图片
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <sys/mman.h>
void show_bmp(char path)
{
char bmp_buf[8004803];
int lcd_buf[800480];
bzero(bmp_buf,sizeof(bmp_buf));
bzero(lcd_buf,sizeof(lcd_buf));//1、打开LCD
int lcd_fd = open("/dev/fb0",O_RDWR);
if(lcd_fd < 0)
{perror("open LCD");return -1;
}
//2、打开图片
int bmp_fd = open("path,O_RDONLY);
if(bmp_fd < 0)
{perror("open BMP");return -2;
}//3、去掉不是像素的字节
int ret = lseek(bmp_fd,54,SEEK_SET);
if(ret < 0)
{perror("lseek");return -3;
}//4、读图片像素
int ret1 = read(bmp_fd,bmp_buf,sizeof(bmp_buf));
if(ret1 < 0)
{perror("read");return -4;
}//5、关闭图片
close(bmp_fd);//6、将RGB ----> ARGB
int i;
for(i=0; i<800*480; i++)
{lcd_buf[i] = bmp_buf[i*3]<<0 | bmp_buf[i*3+1]<<8 | bmp_buf[i*3+2]<<16;
}//7、内存映射
int *fd_map = NULL;
fd_map = mmap(NULL,800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED,lcd_fd,0);
if(fd_map == NULL)
{perror("mmap");return -1;
} //8、将图片翻转
int x,y;
for(y=0; y<480; y++)
{for(x=0; x<800; x++){*(fd_map+(479-y)*800+x) = lcd_buf[800*y+x];}
}
//9、解除映射
munmap(fd_map,8004804);
//10、关闭LCD
close(lcd_fd);
}
int man(void){
show_bmp("./01.bmp");
sleep(1);
show_bmp("./02.bmp");
sleep(1);
show_bmp("./03.bmp");
sleep(1);
}
更多推荐
粤嵌gec6818开发板自动切换图片
发布评论