//==========================bmp循环显示照片=============================
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
/*1.打开lcd驱动
2.申请共享内存
3.打开bmp图片,获取图片数据
4.把24位的图片数据转成32位同时放到共享内存里
5.关闭lcd bmp 释放内存*/
/// 任意位置 任意大小 路径名
int show_bmp(int x0,int y0,int w ,int h,char *picname)
{
// 1.打开LCD驱动文件
int lcd_fd = open("/dev/fb0",O_RDWR);
if(lcd_fd<0)
{
printf("打开失败\n");
return -1;
}
printf("打开成功 \n");
//2申请共享内存
char *p=mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_fd,0);
//3 打开bmp图片
int bmp_fd = open(picname,O_RDWR);
if(bmp_fd<0)
{
printf("打开图片失败\n");
return -1;
}
printf("打开图片成功 \n");
//4.把bmp图片的颜色数据读取出来
char buf24[w*h*3];
lseek(bmp_fd,54,SEEK_SET);
int ret=read(bmp_fd,buf24,w*h*3);
if(ret<0)
{
printf("读取数据失败\n");
return -1;
}
printf("读取数据成功 \n");
// 4.把24位的bmp数据转换成32位lcd数据同时放到共享内存里
int x,y;//y 行 x 列
for(y=y0;y<h+y0;y++)//行
for(x=x0;x<w+x0;x++)//列
{
p[y*800*4+x*4+0]=buf24[(h-y+y0-1)*w*3+(x-x0)*3+0];
p[y*800*4+x*4+1]=buf24[(h-y+y0-1)*w*3+(x-x0)*3+1];
p[y*800*4+x*4+2]=buf24[(h-y+y0-1)*w*3+(x-x0)*3+2];
p[y*800*4+x*4+3]=0;
}
//6.关闭lcd bmp 释放内存
close(lcd_fd);
close(bmp_fd);
munmap(p, 800*480*4);
}
int main()
{
while(1)
{
show_bmp(0,0,800,480,"2.bmp");
sleep(1);
}
return 0;
}
显示BMP图片
最新推荐文章于 2024-05-01 19:36:23 发布