Как сделать снимок экрана с помощью / dev / graphics / fb0 (Android) - PullRequest
9 голосов
/ 11 января 2011

Как захватить содержимое экрана устройства Android с помощью /dev/graphics/fb0 и как сделать его файлом изображения, используя собранные данные из кадрового буфера.Я знаю, для этого требуется, чтобы устройство рутировалось, и я согласен с этим.

Заранее спасибо,

Ответы [ 5 ]

12 голосов
/ 12 февраля 2011

Это должно работать:

adb pull /dev/graphics/fb0 fb0
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb32 -s 320x480 -i fb0 -f image2 -vcodec png image.png
5 голосов
/ 22 апреля 2011

Если у вас есть привилегия root.

  1. копировать данные из fb0 в другой файл, например,

    cat fb0 > tmp
    
  2. На данный момент вы все еще не можете открыть новый файл.потому что структура данных файла не может соответствовать ни одному формату файла изображения.Так что вам нужно это расшифровать.В этом файле каждые два байта описывают пиксель.более высокие 5 укусов представляют красный цвет, более низкие 5 укусов представляют синий цвет, а остальные средние 6 укусов зеленого цвета.Вы можете использовать информацию выше для создания BMP и любого другого видимого файла.

4 голосов
/ 06 октября 2011

Иногда решение Nebkat работает, но, работая с инструментом тестирования Dollop, я узнал, что не существует универсального способа создания изображения непосредственно из fb0.Motorola Droid 2 использует RGB 32. Huawei Ascend использует RGB 565. Samsung Captivate не использует ни один, и, похоже, не помещает весь экран в буфер.

1 голос
/ 25 ноября 2014

Если вы не уверены в формате буфера фрейма вашего устройства, вы можете перебирать поддерживаемые форматы ffmpeg следующим образом:

for fmt in $(ffmpeg -pix_fmts|cut -d " " -f 2); do ffmpeg -vcodec rawvideo -f rawvideo -pix_fmt $fmt -s 320x480 -i fb0 -f image2 -vcodec png /tmp/image-$fmt.png; done

Эскизы также являются художественными.

1 голос
/ 02 января 2013

Возможно, вы захотите заменить -pix_fmt rgb32 на -pix_fmt rgb565le для 16-разрядных устройств.

...