从FrameBuffer中获取Android屏幕截图
来源:互联网 发布:不出门而知天下 编辑:程序博客网 时间:2024/06/06 11:02
我们知道,DDMS可以很容易的获取Android手机的屏幕截图,那么它是怎么做到的呢?
其实,android手机上有一个叫做FrameBuffer的设备,图像信息都是通过FrameBuffer写到手机屏幕上去的。因此可以通过读取此设备中的数据来获取当前正在显示的图像。当然DDMS也是这么做到的。
FrameBuffer对应的设备文件就是/dev/graphics/fb0。因此我们可以通过下面的代码读取屏幕图像数据。其中传入的参数fd为一个文件描述符,也可以是socket描述符。这样我们就可以把从fb中读取的屏幕图像信息传递给我们自己的应用,从而获取手机屏幕信息。
void framebuffer_service(int fd)
{
struct fb_var_screeninfo vinfo;
int fb, offset;
char x[256];
struct fbinfo fbinfo;
unsigned i, bytespp;
fb = open("/dev/graphics/fb0", O_RDONLY);
if(fb < 0) goto done;
if(ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) < 0) goto done;
fcntl(fb, F_SETFD, FD_CLOEXEC);
bytespp = vinfo.bits_per_pixel / 8;
fbinfo.version = DDMS_RAWIMAGE_VERSION;
fbinfo.bpp = vinfo.bits_per_pixel;
fbinfo.size = vinfo.xres * vinfo.yres * bytespp;
fbinfo.width = vinfo.xres;
fbinfo.height = vinfo.yres;
fbinfo.red_offset = vinfo.red.offset;
fbinfo.red_length = vinfo.red.length;
fbinfo.green_offset = vinfo.green.offset;
fbinfo.green_length = vinfo.green.length;
fbinfo.blue_offset = vinfo.blue.offset;
fbinfo.blue_length = vinfo.blue.length;
fbinfo.alpha_offset = vinfo.transp.offset;
fbinfo.alpha_length = vinfo.transp.length;
/* HACK: for several of our 3d cores a specific alignment
* is required so the start of the fb may not be an integer number of lines
* from the base. As a result we are storing the additional offset in
* xoffset. This is not the correct usage for xoffset, it should be added
* to each line, not just once at the beginning */
offset = vinfo.xoffset * bytespp;
offset += vinfo.xres * vinfo.yoffset * bytespp;
printf("offset %d/n", offset);
if(writex(fd, &fbinfo, sizeof(fbinfo))) goto done;
lseek(fb, offset, SEEK_SET);
for(i = 0; i < fbinfo.size; i += 256) {
if(readx(fb, &x, 256)) goto done;
if(writex(fd, &x, 256)) goto done;
}
if(readx(fb, &x, fbinfo.size % 256)) goto done;
if(writex(fd, &x, fbinfo.size % 256)) goto done;
done:
if(fb >= 0) close(fb);
close(fd);
}
- 从FrameBuffer中获取Android屏幕截图
- 从FrameBuffer中获取Android屏幕截图
- 从FrameBuffer中获取Android屏幕截图
- FrameBuffer中获取Android屏幕截图
- FrameBuffer中获取Android屏幕截图
- Android 从FrameBuffer中读取界面数据实现截图
- Android 获取屏幕截图
- Android获取屏幕截图
- android 获取屏幕大小和屏幕截图
- Android获取当前屏幕截图,简单粗暴!
- Android 获取当前activity的屏幕截图
- android屏幕framebuffer绘图
- [Python]从安卓手机获取屏幕截图
- Android源码中屏幕截图的实现
- Android源码中屏幕截图的实现
- android中实现屏幕截图的代码
- 获取屏幕截图
- 获取屏幕截图ScreenShot
- 设置网站404页面的正确做法
- Android中的FrameBuffer
- Android GUI更新过程
- android make 命令使用
- 一、数据库启动
- 从FrameBuffer中获取Android屏幕截图
- ColorPicke 拾色器组件 Grid 组件
- 用python解析xml文件
- 深入理解Android消息处理系统——Looper、Handler、Thread
- OpenGL版本与扩展
- 本科和高职高专就业“红绿牌”专业名单出炉
- 中国绝美情诗名句
- 命令模式(Command)---“一个指挥官请求(命令)三连偷袭敌人”
- WinForm 抛弃 System.Configuration