Снимок экрана Nexus One от adb?

Моя цель состоит в том, чтобы смочь ввести одну команду слова и получить снимок экрана от внедренного Nexus One, присоединенного USB.

До сих пор я могу получить кадровый буфер, которому я верю, a 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

Это создает прекрасное фиолетовое изображение, которое имеет части, которые неопределенно напоминают экран, но это ни в коем случае не чистый снимок экрана.

46
задан Nikhil 9 July 2012 в 12:15
поделиться

3 ответа

Я полагаю, что все фреймбуферы на сегодняшний день имеют RGB 565, а не 888.

2
ответ дан 26 November 2019 в 20:07
поделиться

Используя мой 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
7
ответ дан 26 November 2019 в 20:07
поделиться

Похоже, что буфер кадра 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.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])
11
ответ дан 26 November 2019 в 20:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: