首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

编程兑现Android模拟器中窗口截图存成文件

2013-01-27 
编程实现Android模拟器中窗口截图存成文件原文地址:http://blog.csdn.net/ariesjzj/article/details/85282

编程实现Android模拟器中窗口截图存成文件

原文地址:http://blog.csdn.net/ariesjzj/article/details/8528212

Android模拟器内容是用OpenGL渲染的,所以用一般的编程截图(如PrintWindow()等)会是黑屏。这是因为画的东西放在framebuffer里。

一种方法是通过adb把guest的framebuffer数据/dev/graphics/fb0倒到host,再转为图片。但这样速度比较慢。

好在Android模拟器中把guest的framebuffer传到host进行显示,所以在host端只要将framebuffer输出到文件即可。

首先定义每次framebuffer更新时的回调函数:

        android_showOpenglesWindow(winhandle, drect.pos.x, drect.pos.y,                                   drect.size.w, drect.size.h, disp->rotation * -90.);        android_setPostCallback(zjin_fb_update, NULL);
这样,每次有framebuffer的更新时,guest的屏幕都会存成一张bmp图片,这和用/dev/graphics/fb0的效果是一样的。

注意用以上方法截下来的图和原图有两点不同,一是Blue和Red通道互换,这是因为framebuffer是RGB,bmp格式里是BGR。还有就是y轴的零点是左下角,这是由于framebuffer中是OpenGL的坐标系。也就是说,要得到原图还要经过RGB到BGR的转换和y-inversion。建议到处理图片时再做这些处理,一方面不会拖慢模拟器速度,另一方面像OpenCV里有现成的函数可供调用。

热点排行