Как я могу получить цвет пикселя экрана через ADB

Мне нужно получить информацию о цвете определенной точки на экране моего телефона.

есть ли способ сделать это через ADB?

теперь я использую встроенную команду screencap для захвата всего экрана, а затем считываю цвет конкретной точки. Однако, это слишком медленно.

2 ответов


Я отправлю ответ на свой собственный вопрос. Ответ может быть задан устройством (nexus7 2013), и вы можете настроить его на свои собственные устройства.

1.Во-первых, я узнаю, что команда screencap screen.png довольно медленно, потому что он принимает большую часть своего времени преобразования в тип файла png. Итак, чтобы сэкономить время, первым шагом является экран дампа в файл необработанных данных. adb shell screencap screen.dump

2.Проверьте размер файла. Мое разрешение экрана 1920*1200, а размер файла 9216012 байт. Замечаю, что 9216012=1920*1200*4+12, я предполагаю, что файл данных использует 4 байта для хранения каждой пиксельной информации и использует еще 12 байтов для работы с таинственным персоналом. Просто сделать некоторые скриншоты и я найду 12 байт в голове каждого файла одинаковые. Так, еще 12 байт в файле данных.

3.Теперь все просто с помощью dd и hd. Предполагая, что я хочу получить цвет в (x, y): let offset=1200*$y+$x+3 dd if='screen.dump' bs=4 count=1 skip=$offset 2>/dev/null | hd

Я получаю выход, как 00000000: 4b 73 61 ff s 21e sum 21e The 4b 73 61 ff мой ответ.


если ваш телефон коренится и вы знаете его framebuffer формат, который вы можете использовать dd и hd (hexdump), чтобы получить представление пикселей непосредственно из :

adb shell "dd if=/dev/graphics/fb0 bs=<bytes per pixel> count=1 skip=<pixel offset> 2>/dev/null | hd"

обычно <bytes per pixel> = 4 и <pixel offset> = Y * width + X но это может быть по-другому на вашем телефоне.