博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于am3358的lcd输出 分类: TI-AM335X ...
阅读量:5115 次
发布时间:2019-06-13

本文共 4270 字,大约阅读时间需要 14 分钟。

/*#include
*/#include
#include
#include
#include
#include
#include
#include
#include
#include
//14byteÎÄŒþÍ· typedef struct { char cfType[2];//ÎÄŒþÀàÐÍ£¬"BM"(0x4D42) long cfSize;//ÎÄŒþŽóС£š×֜ڣ© long cfReserved;//±£Áô£¬ÖµÎª0 long cfoffBits;//ÊýŸÝÇøÏà¶ÔÓÚÎÄŒþÍ·µÄÆ«ÒÆÁ¿£š×֜ڣ© }__attribute__((packed)) BITMAPFILEHEADER; //__attribute__((packed))µÄ×÷ÓÃÊÇžæËß±àÒëÆ÷È¡Ïûœá¹¹ÔÚ±àÒë¹ý³ÌÖеÄÓÅ»¯¶ÔÆë //40byteÐÅϢͷ typedef struct { char ciSize[4];//BITMAPFILEHEADERËùÕŒµÄ×ÖœÚÊý long ciWidth;//¿í¶È long ciHeight;//žß¶È char ciPlanes[2];//Ä¿±êÉ豞µÄλƜÃæÊý£¬ÖµÎª1 int ciBitCount;//ÿžöÏñËصÄλÊý char ciCompress[4];//ѹËõ˵Ã÷ char ciSizeImage[4];//ÓÃ×֜ڱíÊŸµÄÍŒÏñŽóС£¬žÃÊýŸÝ±ØÐëÊÇ4µÄ±¶Êý char ciXPelsPerMeter[4];//Ä¿±êÉ豞µÄˮƜÏñËØÊý/Ã× char ciYPelsPerMeter[4];//Ä¿±êÉ豞µÄŽ¹Ö±ÏñËØÊý/Ã× char ciClrUsed[4]; //λ͌ʹÓõ÷É«°åµÄÑÕÉ«Êý char ciClrImportant[4]; //Öž¶šÖØÒªµÄÑÕÉ«Êý£¬µ±žÃÓòµÄÖµµÈÓÚÑÕÉ«Êýʱ£š»òÕßµÈÓÚ0ʱ£©£¬±íÊŸËùÓÐÑÕÉ«¶ŒÒ»ÑùÖØÒª }__attribute__((packed)) BITMAPINFOHEADER; typedef struct { unsigned short blue; unsigned short green; unsigned short red; unsigned short reserved; }__attribute__((packed)) PIXEL;//ÑÕɫģʜRGB BITMAPFILEHEADER FileHead; BITMAPINFOHEADER InfoHead; static char *fbp = 0; static int xres = 0; static int yres = 0; static int bits_per_pixel = 0; int showbmp2();int main ( int argc, char *argv[] ) { int fbfd = 0; int index=0; struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; long int screensize = 0; 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£ºreading 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 \n", vinfo.red, vinfo.green, vinfo.blue ); printf("%dx%d, %dbpp,%d clock\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel,vinfo.pixclock ); 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\n",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.\n"); exit(4); } printf("sizeof file header=%d\n", sizeof(BITMAPFILEHEADER)); printf("into show_bmp function\n"); showbmp2(); //ÉŸ³ý¶ÔÏóÓ³Éä munmap(fbp, screensize); // close(fbfd); return 0; } ///* unsigned char buf[3][1680*1050*4]; unsigned char data[640*480*3];int showbmp2(){ int x,y; int index=0; unsigned char *p; FILE *fp[3]; fp[0] = fopen("./000.bmp","rb+"); fp[1] = fopen("./111.bmp","rb+"); fp[2] = fopen("./222.bmp","rb+"); fread(data,54,1,fp[0]); fread(data,640*480*3,1,fp[0]); for(y=0;y<480;y++) { for(x=0;x<800;x++) { if(x<640) { buf[0][((479-y)*800+x)*4 + 0] = data[((y*640) + x)*3 + 0]; buf[0][((479-y)*800+x)*4 + 1] = data[((y*640) + x)*3 + 1]; buf[0][((479-y)*800+x)*4 + 2] = data[((y*640) + x)*3 + 2]; //buf[1][(479-y)*1680+x)*4 + 3] = data[((y*640) + x)*3 + 0]; } } }// fread(data,54,1,fp[1]); fread(data,640*480*3,1,fp[1]); for(y=0;y<480;y++) { for(x=0;x<1680;x++) { if(x<640) { buf[1][((479-y)*800+x)*4 + 0] = data[((y*640) + x)*3 + 0]; buf[1][((479-y)*800+x)*4 + 1] = data[((y*640) + x)*3 + 1]; buf[1][((479-y)*800+x)*4 + 2] = data[((y*640) + x)*3 + 2]; //buf[1][(479-y)*1680+x)*4 + 3] = data[((y*640) + x)*3 + 0]; } } }// fread(data,54,1,fp[2]); fread(data,640*480*3,1,fp[2]); for(y=0;y<480;y++) { for(x=0;x<1680;x++) { if(x<640) { buf[2][((479-y)*800+x)*4 + 0] = data[((y*640) + x)*3 + 0]; buf[2][((479-y)*800+x)*4 + 1] = data[((y*640) + x)*3 + 1]; buf[2][((479-y)*800+x)*4 + 2] = data[((y*640) + x)*3 + 2]; //buf[1][(479-y)*1680+x)*4 + 3] = data[((y*640) + x)*3 + 0]; } } } fclose(fp[0]); fclose(fp[1]); fclose(fp[2]); // while(1) { memcpy(fbp,buf[index%3],800*480*4); sleep(1); if(index++>100) break; } printf("/nover!/n"); return 0;}

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

转载于:https://www.cnblogs.com/mao0504/p/4706405.html

你可能感兴趣的文章
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>
新手算法学习之路----二叉树(在一个二叉查找树中插入一个节点)
查看>>
autopep8
查看>>
GIT在Linux上的安装和使用简介
查看>>