显示BMP图片

//==========================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;
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值