| 
 
贡献497 
飞刀106 FD
注册时间2021-3-9
在线时间14 小时积分101 
 
 扫一扫,手机访问本帖  | 
 
| 输出到hdmi,屏幕分辨率、bmp一致,1680*1050,复制代码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.\n");
                exit(1);
            }
            if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo))
            {
                printf("Error£oreading fixed information.\n");
                exit(2);
            }
            if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo))
            {
                printf("Error: reading variable information.\n");
                exit(3);
            }
         printf("R:%d,G:%d,B:%d,line:%d\n", vinfo.red, vinfo.green, vinfo.blue ,finfo.line_length);
            printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel );
            xres = vinfo.xres;
            yres = vinfo.yres;
            bits_per_pixel = vinfo.bits_per_pixel;
            //ŒÆËãÆáÄ»μÄ×üŽóD¡£š×Öœú£©
            screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
            printf("screensize=%d byte\n",screensize);
            //¶ÔÏóó3éä
            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.\n");
                exit(4);
            }
            printf("sizeof file header=%d\n", sizeof(BITMAPFILEHEADER));
            printf("into show_bmp function\n");
            FILE *fp[3];
                fp[0] = fopen("./1.bmp","rb+");
                fp[1] = fopen("./2.bmp","rb+");
                fp[2] = fopen("./3.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++)
                {
                    {
                            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++)
                {
                    {
                            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++)
                {
                     {
                            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 ;
        }
输出结果:
 
  
  
 | 
 |