zoukankan      html  css  js  c++  java
  • 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 ;
     }

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

  • 相关阅读:
    nginx配置url伪静态
    PHP爬虫之queryList
    PHP 判断给定两个时间是否在同一周,月,年
    服务器nginx配置显示文件而不是下载
    PHP yield占用内存测试
    PHP 函数运行的内存
    io系列之字节流
    io系列之字符流
    对于Arrays的deep相关的方法。
    常用工具类(System,Runtime,Date,Calendar,Math)
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706850.html
Copyright © 2011-2022 走看看