2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > bmp图片在arm开发板显示

bmp图片在arm开发板显示

时间:2022-10-02 05:41:58

相关推荐

bmp图片在arm开发板显示

//复合数据类型的设计 结构体数据类型 枚举数据类型typedef unsigned short UINT;typedef unsigned int DWORD; typedef unsigned short WORD; typedef unsigned int LONG; typedef struct tagBITMAPFILEHEADER { /* bmp文件头结构体 14 */UINT bfType;//2DWORD bfSize;//4UINT bfReserved1;UINT bfReserved2;DWORD bfOffBits;} BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER { /* bmih 位图信息头结构体 40个字节*/DWORD biSize;//4LONG biWidth; //图片的宽度LONG biHeight;//图片的高度WORD biPlanes;//2WORD biBitCount;DWORD biCompression;DWORD biSizeImage; //图片的大小LONG biXPelsPerMeter;LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;}BITMAPINFOHEADER;//显示图片int show_bmp(char *fileName){//1、打开液晶屏文件int lcdfd = open("/dev/fb0",O_RDWR);if(lcdfd == -1){perror("open lcd error");return -1;}//内存映射int *lcd_p=mmap(NULL,480*800*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcdfd,0);if(lcd_p== MAP_FAILED){perror("lcd mmap error");return -1;}char bmpbuf[800*480*3];//存储图片的数据int tempbuf[800*480];//存储转换颜色顺序之后的数据//2、打开图片文件int bmpfd = open(fileName,O_RDWR);if(bmpfd == -1){perror("open bmpfd error");return -1;}//在读取位图颜色数据之前,把前面54个字节的文件头+位图信息头跳过//lseek(bmpfd,54,SEEK_SET);//读取前面14个字节的文件头数据BITMAPFILEHEADER fileHeader;read(bmpfd,&fileHeader,14);//读取中间40个字节的位图信息头数据BITMAPINFOHEADER infoheader;read(bmpfd,&infoheader,40);//3、读取图片的数据 bmpbufread(bmpfd,bmpbuf,800*480*3);//将图片数据每个像素点BGR转换成 ARGBfor(int i=0,j=0; i<800*480; i++,j+=3){tempbuf[i] = 0x00<<24|bmpbuf[j+2]<<16|bmpbuf[j+1]<<8|bmpbuf[j];}//还要将图片的数据上下180度颠倒int flipbuf[800*480];//存储翻转之后的数据for(int j=0; j<480; j++){for(int i=0; i<800 ;i++){flipbuf[j*800+i] = tempbuf[(479-j)*800+i];}}//从右边开始慢慢显示一张图片for(int j=799; j>=0; j--){for(int i=0; i<480 ;i++){lcd_p[i*800+j] = flipbuf[i*800+j];}usleep(500);}//5、关闭液晶屏文件、关闭图片文件close(bmpfd);close(lcdfd);munmap(lcd_p,480*800*4);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。