- 积分
- 101
贡献497
飞刀106 FD
注册时间2021-3-9
在线时间14 小时
扫一扫,手机访问本帖
|
- 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 ;
- }
复制代码 输出到hdmi,屏幕分辨率、bmp一致,1680*1050,
输出结果:
|
|