Как я могу получить цвет пикселя экрана через 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
но это может быть по-другому на вашем телефоне.