来自adb的Nexus One的屏幕截图?

Mar*_*cus 46 graphics android screenshot ffmpeg

我的目标是能够键入一个单词命令,并从USB连接的Nexus One屏幕截图中获取屏幕截图.

到目前为止,我可以32bit xRGB888通过这样拉动它来获得我认为是原始图像的帧缓冲:

adb pull /dev/graphics/fb0 fb0
Run Code Online (Sandbox Code Playgroud)

从那里开始,我很难将它转换为png.我正在尝试像这样的ffmpeg:

ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb8888 -s 480x800 -i fb0 -f image2 -vcodec png image.png
Run Code Online (Sandbox Code Playgroud)

这创造了一个可爱的紫色图像,其部分模糊地与屏幕相似,但它绝不是一个干净的屏幕截图.

Ben*_*ton 90

ICS的一个更简单的解决方案是从命令行使用以下内容

adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png screenshot.png
Run Code Online (Sandbox Code Playgroud)

这将把screenshot.png文件保存在当前目录中.

测试运行4.0.3的三星Galaxy SII和SII.

  • 更快:`adb shell screencap -p\| uuencode o | uudecode -o out.png`(虽然需要linux + uudecode,但base64也可以) (8认同)

And*_*sev 13

实际上,还有一个非常简单的从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')
Run Code Online (Sandbox Code Playgroud)

并打电话monkeyrunner 1.script.


小智 11

似乎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
Run Code Online (Sandbox Code Playgroud)

从这里描述的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.py <fb0b >fb0b.888
convert -depth 8 -size 480x800 RGB:fb0b.888 fb0.png
Run Code Online (Sandbox Code Playgroud)

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])
Run Code Online (Sandbox Code Playgroud)


Cow*_*wan 7

使用我的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
Run Code Online (Sandbox Code Playgroud)


小智 6

如果你安装了dos2unix,那么下面

adb shell screencap -p | dos2unix > screen.png
Run Code Online (Sandbox Code Playgroud)