46 votes

Capture d'écran du Nexus One depuis adb ?

Mon objectif est de pouvoir taper une commande d'un mot et d'obtenir une capture d'écran à partir d'un Nexus One enraciné connecté par USB.

Jusqu'à présent, je peux obtenir le framebuffer qui, je crois, est un 32bit xRGB888 image brute en la tirant comme ceci :

adb pull /dev/graphics/fb0 fb0

Mais à partir de là, j'ai du mal à le convertir en png. J'essaie avec ffmpeg comme ceci :

ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb8888 -s 480x800 -i fb0 -f image2 -vcodec png image.png

Cela crée une belle image violette dont certaines parties ressemblent vaguement à l'écran, mais ce n'est en aucun cas une capture d'écran propre.

90voto

Ben Clayton Points 16793

Une solution beaucoup plus simple pour ICS est d'utiliser ce qui suit à partir de la ligne de commande

adb shell /system/bin/screencap -p /sdcard/screenshot.png
adb pull /sdcard/screenshot.png screenshot.png

Cela permettra d'enregistrer le fichier screenshot.png dans le répertoire actuel.

Testé sur un Samsung Galaxy SII & SII fonctionnant en 4.0.3.

13voto

darkmist Points 2023

En fait, il existe une autre possibilité très simple pour faire une capture d'écran à partir de votre appareil Android : écrire un simple script. 1.script comme ça :

# 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')

et appeler monkeyrunner 1.script .

11voto

Olivier Points 101

Il semble que le frame buffer du N1 utilise un encodage RGB32 (32 bits par pixel).

Voici mon script utilisant 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

Une autre méthode dérivée de la méthode ADP1 décrite ici 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

Python script '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])

7voto

Cowan Points 17235

En utilisant mon HTC Hero (et donc en ajustant de 480x800 à 320x480), cela fonctionne si j'utilise rgb565 au lieu de 8888 :

ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 -s 320x480 -i fb0 -f image2 -vcodec png image.png

6voto

user3058757 Points 21

Si vous avez installé dos2unix, alors la commande suivante est disponible.

adb shell screencap -p | dos2unix > screen.png

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X