¿Cómo puedo obtener el color de un pixel de pantalla a través de ADB
Necesito obtener la información de color de un punto específico en la pantalla de mi teléfono Android.
¿Hay alguna manera de hacerlo a través de ADB?
- Cambiar preferencia Resumen de artículo Color de texto en Android 4
- Cómo cambiar el color de acento en mi aplicación de Android de azul a otra cosa
- Texto de contorno de texto de Android
- Mezcla de colores en android
- La desactivación de la aceleración de hardware para mapView conduce a redesencuentros constantes
Ahora estoy utilizando el comando build-in screencap para capturar toda la pantalla y luego leer el color del punto específico. Sin embargo, es demasiado lento.
- Configurar gestos de color a transparente
- Cambiar el color de TextView que se puede hacer clic en el enfoque y hacer clic?
- Color de texto del menú emergente de Android (AppCompat)
- Eventos Android CalendarProvider Color
- Cómo cambiar el color de burbuja de EditText (bajo el cursor) en android?
- Cómo configurar el color de texto de TextView en código?
- Android: ¿cambia el color del texto deshabilitado mediante el tema / estilo?
- Cómo cambiar el color de la burbuja (bajo cursor) en EditView (PROGRAMATICALLY)?
Voy a publicar una respuesta a mi propia pregunta. La respuesta tal vez especificada por el dispositivo (nexus7 2013), y se puede ajustar a sus propios dispositivos.
1.En primer lugar, me entero de que el comando screencap screen.png
es bastante lento, ya que toma la mayor parte de su tiempo convirtiendo a png tipo de archivo. Por lo tanto, para ahorrar tiempo, el primer paso es la pantalla de volcado a un archivo de datos sin procesar. adb shell screencap screen.dump
2.Compruebe el tamaño del archivo. Mi resolución de pantalla es 1920 * 1200, y el tamaño de archivo es 9216012 byte. Observando que 9216012 = 1920 * 1200 * 4 + 12, supongo que el archivo de datos utiliza 4 bytes para almacenar cada información de píxeles, y utilizar otro byte de 12 para hacer un poco de personal de misterio. Sólo hacer algunos más screencaps y me parece que el 12 byte en la cabeza de cada archivo son los mismos. Por lo tanto, los 12 bytes adicionales están a la cabeza del archivo de datos.
3. Ahora, las cosas son simples usando dd
y hd
. Suponiendo que quiero obtener el color en (x, y): let offset=1200*$y+$x+3 dd if='screen.dump' bs=4 count=1 skip=$offset 2>/dev/null | hd
let offset=1200*$y+$x+3 dd if='screen.dump' bs=4 count=1 skip=$offset 2>/dev/null | hd
Tengo salida como 00000000: 4b 73 61 ff s 21e sum 21e
El 4b 73 61 ff
es mi respuesta.
Si tu teléfono está enraizado y sabes su formato framebuffer
, puedes usar dd
y hd
(hexdump) para obtener la representación de píxeles directamente desde el archivo framebuffer
:
adb shell "dd if=/dev/graphics/fb0 bs=<bytes per pixel> count=1 skip=<pixel offset> 2>/dev/null | hd"
Normalmente <bytes per pixel> = 4
y <pixel offset> = Y * width + X
pero podría ser diferente en su teléfono.
- Cómo bloquear la pantalla de un dispositivo Android
- Deshabilitar vínculos de WebView funciona en el emulador pero no en el dispositivo