• linux下的framebuffer显示图片 分类: arm-linux-Ubuntu 2013-08-12 15:43 506人阅读 评论(0) 收藏


    void  showbmp2()
     {
         int x,y;
         unsigned char *p;
         int index=0;
         struct fb_var_screeninfo vinfo; 
         struct fb_fix_screeninfo finfo; 

         struct fb_bitfield red; 
         struct fb_bitfield green; 
         struct fb_bitfield blue; 

         //open the showdeviece
         fbfd = open("/dev/fb0", O_RDWR); 
         if (!fbfd) 
         { 
      printf("Error: cannot open framebuffer device. "); 
      exit(1); 
         } 
      
         if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) 
         { 
      printf("Error£ºreading fixed information. "); 
      exit(2); 
         } 
      
         if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) 
         { 
      printf("Error: reading variable information. "); 
      exit(3); 
         } 
      
         printf("R:%d,G:%d,B:%d ", vinfo.red, vinfo.green, vinfo.blue ); 
      
         printf("%dx%d, %dbpp ", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel ); 
         xres = vinfo.xres; 
         yres = vinfo.yres; 
         bits_per_pixel = vinfo.bits_per_pixel; 
      
         //ŒÆËãÆÁÄ»µÄ×ÜŽóС£š×֜ڣ©  
         screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; 
         printf("screensize=%d byte ",screensize); 
      
         //¶ÔÏóÓ³Éä  
         fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0); 
         if ((int)fbp == -1) 
         { 
      printf("Error: failed to map framebuffer device to memory. "); 
      exit(4); 
         } 
      
         printf("sizeof file header=%d ", sizeof(BITMAPFILEHEADER)); 
      
         printf("into show_bmp function "); 
         FILE *fp[3];

      fp[0] = fopen("./333.bmp","rb+");
      fp[1] = fopen("./444.bmp","rb+");
      fp[2] = fopen("./555.bmp","rb+");

         fread(data,54,1,fp[0]);
         fread(data,WIDTH*HEIGHT*3,1,fp[0]);
         for(y=0;y<HEIGHT;y++)
         {
      for(x=0;x<WIDTH;x++)
      {
          //if(x<640)
          {
           buf[1][(((HEIGHT-1)-y)*WIDTH+x)*4 + 0] = data[((y*WIDTH) + x)*3 + 0];
              buf[1][(((HEIGHT-1)-y)*WIDTH+x)*4 + 1] = data[((y*WIDTH) + x)*3 + 1];
              buf[1][(((HEIGHT-1)-y)*WIDTH+x)*4 + 2] = data[((y*WIDTH) + x)*3 + 2];
              //buf[1][(479-y)*WIDTH+x)*4 + 3] = data[((y*640) + x)*3 + 0];
          }
      }
         }
     //
         fread(data,54,1,fp[1]);
         fread(data,WIDTH*HEIGHT*3,1,fp[1]);
         for(y=0;y<HEIGHT;y++)
         {
      for(x=0;x<WIDTH;x++)
      {
          //if(x<640)
          {
           buf[2][(((HEIGHT-1)-y)*WIDTH+x)*4 + 0] = data[((y*WIDTH) + x)*3 + 0];
              buf[2][(((HEIGHT-1)-y)*WIDTH+x)*4 + 1] = data[((y*WIDTH) + x)*3 + 1];
              buf[2][(((HEIGHT-1)-y)*WIDTH+x)*4 + 2] = data[((y*WIDTH) + x)*3 + 2];
              //buf[1][(479-y)*WIDTH+x)*4 + 3] = data[((y*640) + x)*3 + 0];
          }
      }
         }
     //
         fread(data,54,1,fp[2]);
         fread(data,WIDTH*HEIGHT*3,1,fp[2]);
         for(y=0;y<HEIGHT;y++)  
         {
      for(x=0;x<WIDTH;x++)
      {
         // if(x<640)
           {
           buf[3][(((HEIGHT-1)-y)*WIDTH+x)*4 + 0] = data[((y*WIDTH) + x)*3 + 0];
              buf[3][(((HEIGHT-1)-y)*WIDTH+x)*4 + 1] = data[((y*WIDTH) + x)*3 + 1];
              buf[3][(((HEIGHT-1)-y)*WIDTH+x)*4 + 2] = data[((y*WIDTH) + x)*3 + 2];
              //buf[1][(479-y)*WIDTH+x)*4 + 3] = data[((y*640) + x)*3 + 0];
          }
      }
         }
         fclose(fp[0]); fclose(fp[1]); fclose(fp[2]);
         //
         while(1)
         {

          memcpy(fbp,buf[index++%picindex + 1],WIDTH*HEIGHT*4);
          sleep(2);

         }   
         printf("/nover!/n");

         return ;
     }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    JavaScript创建块级作用域
    JavaScript数组求最大值 面试题
    JavaScript类数组转换为数组 面试题
    JavaScript实现深拷贝(深复制) 面试题
    javascript洗牌算法 乱序算法 面试题
    3GPP 测试 /etc/udev/ruse.d/50文件 /lib/udev/ruse.d/55* 网络配置
    【网络】TCP/IP连接三次握手
    SVN 使用方法
    Git 使用方法
    LoadRunner性能测试工具
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706850.html
Copyright © 2020-2023  润新知