我的目标是能够键入一个单词命令,并从USB连接的Nexus One屏幕截图中获取屏幕截图.
到目前为止,我可以32bit xRGB888
通过这样拉动它来获得我认为是原始图像的帧缓冲:
adb pull /dev/graphics/fb0 fb0
从那里开始,我很难将它转换为png.我正在尝试像这样的ffmpeg:
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb8888 -s 480x800 -i fb0 -f image2 -vcodec png image.png
这创造了一个可爱的紫色图像,其部分模糊地与屏幕相似,但它绝不是一个干净的屏幕截图.
ICS的一个更简单的解决方案是从命令行使用以下内容
adb shell /system/bin/screencap -p /sdcard/screenshot.png adb pull /sdcard/screenshot.png screenshot.png
这将把screenshot.png文件保存在当前目录中.
测试运行4.0.3的三星Galaxy SII和SII.
实际上,还有一个非常简单的从Android设备中获取屏幕截图的能力:编写如下的简单脚本1.script
:
# Imports the monkeyrunner modules used by this program from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # Connects to the current device, returning a MonkeyDevice object device = MonkeyRunner.waitForConnection() # Takes a screenshot result = device.takeSnapshot() # Writes the screenshot to a file result.writeToFile('1.png','png')
并打电话monkeyrunner 1.script
.
似乎N1的帧缓冲器使用RGB32编码(每像素32位).
这是我使用ffmpeg的脚本:
adb pull /dev/graphics/fb0 fb0 dd bs=1920 count=800 if=fb0 of=fb0b ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 480x800 -i fb0b -f image2 -vcodec png fb0.png
从这里描述的ADP1方法派生的另一种方法http://code.lardcave.net/entries/2009/07/27/132648/
adb pull /dev/graphics/fb0 fb0 dd bs=1920 count=800 if=fb0 of=fb0b python rgb32torgb888.pyfb0b.888 convert -depth 8 -size 480x800 RGB:fb0b.888 fb0.png
Python脚本'rgb32torgb888.py':
import sys while 1: colour = sys.stdin.read(4) if not colour: break sys.stdout.write(colour[2]) sys.stdout.write(colour[1]) sys.stdout.write(colour[0])
使用我的HTC Hero(因此从480x800调整到320x480),如果我使用rgb565而不是8888,这是有效的:
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 320x480 -i fb0 -f image2 -vcodec png image.png
如果你安装了dos2unix,那么下面
adb shell screencap -p | dos2unix > screen.png