嵌入式爱好者

查看: 21654|回复: 1

[Linux] framebuff编程,输出bmp,显示不太正常

[复制链接]

20

主题

34

帖子

101

积分

扫一扫,手机访问本帖
发表于 2021-7-26 09:18:14 | 显示全部楼层 |阅读模式
  1. void  showbmp2()
  2.         {
  3.             int x,y;
  4.             unsigned char *p;
  5.             int index=0;
  6.             struct fb_var_screeninfo vinfo;
  7.             struct fb_fix_screeninfo finfo;

  8.             struct fb_bitfield red;
  9.             struct fb_bitfield green;
  10.             struct fb_bitfield blue;

  11.             //open the showdeviece
  12.             fbfd = open("/dev/fb0", O_RDWR);
  13.             if (!fbfd)
  14.             {
  15.                 printf("Error: cannot open framebuffer device.\n");
  16.                 exit(1);
  17.             }

  18.             if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo))
  19.             {
  20.                 printf("Error£oreading fixed information.\n");
  21.                 exit(2);
  22.             }

  23.             if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo))
  24.             {
  25.                 printf("Error: reading variable information.\n");
  26.                 exit(3);
  27.             }

  28.          printf("R:%d,G:%d,B:%d,line:%d\n", vinfo.red, vinfo.green, vinfo.blue ,finfo.line_length);

  29.             printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel );
  30.             xres = vinfo.xres;
  31.             yres = vinfo.yres;
  32.             bits_per_pixel = vinfo.bits_per_pixel;

  33.             //ŒÆËãÆáÄ»μÄ×üŽóD¡£š×Öœú£©
  34.             screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
  35.             printf("screensize=%d byte\n",screensize);

  36.             //¶ÔÏóó3éä
  37.             fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);
  38.             if ((int)fbp == -1)
  39.             {
  40.                 printf("Error: failed to map framebuffer device to memory.\n");
  41.                 exit(4);
  42.             }

  43.             printf("sizeof file header=%d\n", sizeof(BITMAPFILEHEADER));

  44.             printf("into show_bmp function\n");
  45.             FILE *fp[3];

  46.                 fp[0] = fopen("./1.bmp","rb+");
  47.                 fp[1] = fopen("./2.bmp","rb+");
  48.                 fp[2] = fopen("./3.bmp","rb+");

  49.             fread(data,54,1,fp[0]);
  50.             fread(data,WIDTH*HEIGHT*3,1,fp[0]);
  51.             
  52.             for(y=0;y<HEIGHT;y++)
  53.             {
  54.                 for(x=0;x<WIDTH;x++)
  55.                 {

  56.                     {
  57.                             buf[1][(((HEIGHT-1)-y)*WIDTH+x)*4 + 0] = data[((y*WIDTH) + x)*3 + 0];
  58.                         buf[1][(((HEIGHT-1)-y)*WIDTH+x)*4 + 1] = data[((y*WIDTH) + x)*3 + 1];
  59.                         buf[1][(((HEIGHT-1)-y)*WIDTH+x)*4 + 2] = data[((y*WIDTH) + x)*3 + 2];
  60.                         //buf[1][(479-y)*WIDTH+x)*4 + 3] = data[((y*640) + x)*3 + 0];
  61.                     }
  62.                 }
  63.             }
  64.         //
  65.             fread(data,54,1,fp[1]);
  66.             fread(data,WIDTH*HEIGHT*3,1,fp[1]);
  67.             for(y=0;y<HEIGHT;y++)
  68.             {
  69.                 for(x=0;x<WIDTH;x++)
  70.                 {

  71.                     {
  72.                             buf[2][(((HEIGHT-1)-y)*WIDTH+x)*4 + 0] = data[((y*WIDTH) + x)*3 + 0];
  73.                         buf[2][(((HEIGHT-1)-y)*WIDTH+x)*4 + 1] = data[((y*WIDTH) + x)*3 + 1];
  74.                         buf[2][(((HEIGHT-1)-y)*WIDTH+x)*4 + 2] = data[((y*WIDTH) + x)*3 + 2];
  75.                         //buf[1][(479-y)*WIDTH+x)*4 + 3] = data[((y*640) + x)*3 + 0];
  76.                     }
  77.                 }
  78.             }
  79.         //
  80.             fread(data,54,1,fp[2]);
  81.             fread(data,WIDTH*HEIGHT*3,1,fp[2]);
  82.             for(y=0;y<HEIGHT;y++)
  83.             {
  84.                 for(x=0;x<WIDTH;x++)
  85.                 {

  86.                      {
  87.                             buf[3][(((HEIGHT-1)-y)*WIDTH+x)*4 + 0] = data[((y*WIDTH) + x)*3 + 0];
  88.                         buf[3][(((HEIGHT-1)-y)*WIDTH+x)*4 + 1] = data[((y*WIDTH) + x)*3 + 1];
  89.                         buf[3][(((HEIGHT-1)-y)*WIDTH+x)*4 + 2] = data[((y*WIDTH) + x)*3 + 2];
  90.                         //buf[1][(479-y)*WIDTH+x)*4 + 3] = data[((y*640) + x)*3 + 0];
  91.                     }
  92.                 }
  93.             }
  94.             fclose(fp[0]); fclose(fp[1]); fclose(fp[2]);
  95.             //
  96.             while(1)
  97.             {

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

  100.             }
  101.             printf("/nover!/n");

  102.             return ;
  103.         }
复制代码
输出到hdmi,屏幕分辨率、bmp一致,1680*1050,
输出结果:


回复

使用道具 举报

0

主题

236

帖子

752

积分

A40i/T3/T507/T527通行证i.MX6Q通行证i.MX6UL通行证i.MX8MM通行证RK3568通行证RK3399通行证LS1028A通行证LS1012A通行证LS1043A\46A通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU11xx通行证FCU1201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX RT通行证XX18通行证AM62x资料下载

发表于 2021-8-26 13:52:44 | 显示全部楼层
你做的这个偏向framebuff编程应用方面的,我们也没有做过,无法提供好的支持,你可以到ti中文论坛找找解决方法https://e2echina.ti.com/
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-11-11 03:50

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表