将开发板中显示的图像保存为bmp
来源:互联网 发布:java concurrent i自增 编辑:程序博客网 时间:2024/06/06 02:21
从/dev/fb0中获取数据保存为bmp文件
/********************************File name : fbtools.h */ #ifndef _FBTOOLS_H_ #define _FBTOOLS_H_ #include <linux/fb.h> typedef unsigned int size_t ;//a framebuffer device structure; typedef struct fbdev{ int fb; unsigned long fb_mem_offset; unsigned long fb_mem; struct fb_fix_screeninfo fb_fix; struct fb_var_screeninfo fb_var; char dev[20]; } FBDEV, *PFBDEV; //open & init a frame buffer //to use this function, //you must set FBDEV.dev="/dev/fb0" //or "/dev/fbX" //it's your frame buffer. int fb_open(PFBDEV pFbdev); //close a frame buffer int fb_close(PFBDEV pFbdev); //get display depth int get_display_depth(PFBDEV pFbdev); //full screen clear void fb_memset(void *addr, int c, size_t len); #endif /****************** File name : fbtools.c */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h> #include <sys/mman.h> //#include <asm/page.h> //#include "fbtools.h" #define TRUE 1 #define FALSE 0 #define MAX(x,y) ((x)>(y)?(x)y))#define MIN(x,y) ((x)<(y)?(x)y))//open & init a frame buffer#define PAGE_MASK 0xffffint fb_open(PFBDEV pFbdev){pFbdev->fb = open(pFbdev->dev, O_RDWR);if(pFbdev->fb < 0){printf("Error opening %s: %m. Check kernel config\n", pFbdev->dev);return FALSE;}if (-1 == ioctl(pFbdev->fb,FBIOGET_VSCREENINFO,&(pFbdev->fb_var))){printf("ioctl FBIOGET_VSCREENINFO\n");return FALSE;}if (-1 == ioctl(pFbdev->fb,FBIOGET_FSCREENINFO,&(pFbdev->fb_fix))){printf("ioctl FBIOGET_FSCREENINFO\n");return FALSE; } //map physics address to virtual address pFbdev->fb_mem_offset = 0; //(unsigned long)(pFbdev->fb_fix.smem_start) & (~PAGE_MASK);pFbdev->fb_mem = (unsigned long int)mmap(NULL, pFbdev->fb_fix.smem_len + pFbdev->fb_mem_offset, PROT_READ | PROT_WRITE, MAP_SHARED, pFbdev->fb, 0);if (-1L == (long) pFbdev->fb_mem) { printf("mmap error! mem:%d offset:%d\n", pFbdev->fb_mem, pFbdev->fb_mem_offset); return FALSE; } return TRUE; } //close frame bufferint fb_close(PFBDEV pFbdev) { close(pFbdev->fb); pFbdev->fb=-1; } //get display depthint get_display_depth(PFBDEV pFbdev){ if(pFbdev->fb<=0) { printf("fb device not open, open it first\n"); return FALSE; } return pFbdev->fb_var.bits_per_pixel; } //full screen clear void fb_memset (void *addr, int c, size_t len) { memset(addr, c, len); } //use by test#define DEBUG//#ifdef DEBUGtypedef unsigned short WORD ;typedef unsigned long DWORD ;typedef long LONG ;#pragma pack(1)//c编译器按n个字节对齐 typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;} BITMAPFILEHEADER, *PBITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant;} BITMAPINFOHEADER;#pragma pack()main(){FBDEV fbdev;FILE * fpout;BITMAPFILEHEADER bmpFile;BITMAPINFOHEADER bmpInfo ;memset(&bmpFile, 0, sizeof(bmpFile));memset(&bmpInfo, 0, sizeof(bmpInfo));bmpFile.bfType = 'MB' ;bmpFile.bfOffBits = sizeof(bmpFile) + sizeof(bmpInfo) ;bmpInfo.biSize = sizeof(bmpInfo) ;memset(&fbdev, 0, sizeof(FBDEV));strcpy(fbdev.dev, "/dev/fb0");if(fb_open(&fbdev)==FALSE){printf("open frame buffer error\n");return 0;}bmpInfo.biWidth= fbdev.fb_var.xres_virtual ;bmpInfo.biHeight = - fbdev.fb_var.yres_virtual ; bmpInfo.biPlanes = 1 ;bmpInfo.biBitCount= fbdev.fb_var.bits_per_pixel ;bmpFile.bfSize = sizeof(bmpFile) + sizeof(bmpInfo) + fbdev.fb_fix.smem_len ;fpout=fopen("fbsnap.bmp", "w");fwrite((char*)&bmpFile, sizeof(bmpFile) ,1, fpout);fwrite((char*)&bmpInfo, sizeof(bmpInfo) ,1, fpout);fwrite((char*)fbdev.fb_mem, fbdev.fb_fix.smem_len ,1, fpout);fclose(fpout);printf(" mem %p %p len %d \n", fbdev.fb_mem, fbdev.fb_mem_offset, fbdev.fb_fix.smem_len);fb_close(&fbdev);}
0 0
- 将开发板中显示的图像保存为bmp
- MFC中,将视图中的内容保存为图像(bmp、jpg)
- GDI+ 将BMP 32图像转换为JPG文件格式保存
- 将rgb图像数据保存为BMP格式图片的方法
- 将rgb图像数据保存为BMP格式图片的方法
- 将桌面显示获取并保存到bmp中
- 将桌面显示获取并保存到bmp中
- VC 将界面中静态控件画的图形保存为bmp格式的图片
- DM642学习点滴三:将DSP内存中的图像数据保存为BMP图像
- 利用opengl将3ds文件导入场景并显示,然后保存这个场景为bmp格式图像,其结果与显示不同,问题出在哪儿了
- bmp图像读取显示保存问题
- VC保存和显示数据库图像(BMP)
- VC保存和显示数据库图像(BMP)
- 将位图句柄保存为BMP文件
- 将HDC保存为BMP文件
- 将HDC保存为BMP文件
- WinCE将HDC保存为BMP文件
- 将RTF内容保存为BMP
- 字典
- js合并数组
- js时间日期处理
- 打造高性能JAVA应用你需要知道的
- oracle数据导入导出表等系列操作总结
- 将开发板中显示的图像保存为bmp
- 手动设置SwipeRefreshLayout的setRefreshing(true)遇到的问题
- Oracle 如何查询被锁定表及如何解锁释放session
- Android 自定义控件之inflate()
- IOS学的容易----单例类对数据库的具体的操作的⽅法进⾏封装(二)
- Ubuntu14.02下ssh安装与配置
- Java对象序列化
- 发邮件MailMessage、SmtpClient
- 关于java获取本地ip的几种方法