El problema del «fondo de pantalla maldito» era un solo «píxel maldito»

Hace unos días, corrió como la pólvora la noticia de que un fondo de pantalla en particular podía bloquear tu smartphone Android hasta el punto de que tuvieras que hacer un reset de fábrica para poder volver a utilizarlo.

En su momento ya escuchamos que el problema parecía estar relacionado con la información del espacio de color utilizado por la imagen, que al parecer no era válido y hacía que algunos smartphones Android se bloquearan al interpretarlo.

Ahora Google ha explicado en mayor detalle cuál es la «maldición» que esconde ese fondo de pantalla que tantos quebradores de cabeza ha producido a quienes se atrevieron a probarlo.

TE INTERESA:

No configures esta imagen como fondo de pantalla: Bloquea tu smartphone (en serio)

Un píxel con un color blanquecino tumba todo el sistema operativo

Según explica Google, el fondo de pantalla «maldito» está codificado en un espacio de color especial que se llama «Google/Skia/E3CADAB7BD3DE5E3436874D2A9DEE126» (este es el nombre completo del espacio de color, y Skia se refiere a la biblioteca de gráficos 2D hecha por Google).

Esto es bastante extraño ya que la mayoría de las imágenes de fondo de pantalla están codificadas en un espacio de color mucho más habitual llamado «sRGB».

En Android 10 y anteriores, todas las imágenes de fondo de pantalla se convierten a sRGB, así que eso es lo que ocurría con este fondo de pantalla. El problema se encuentra en un extraño error que puede ocurrir al convertir la imagen a sRGB, ya que el que el código que calcula el valor de «luminancia» de cada píxel puede llegar a superar el límite máximo de 255.

La luminancia se calcula con la siguiente fórmula:

Luminancia = 0.2126 * [rojo] + 0.7152 * [verde] + 0.0722 * [azul]

Aquí [rojo], [verde] y [azul] son los valores de color rojo, verde y azul del píxel representados en un valor de 8 bits de 0 a 255. El problema de este cálculo es que cada suma parcial se redondea hacia arriba antes de la suma final.

Un píxel «maldito» del fondo de pantalla tiene los valores RGB 255, 255 y 243 (un color amarillento casi blanco) y, cuando se realizan las multiplicaciones anteriores y se redondea hacia arriba el resultado antes de sumar los tres valores, se obtiene un resultado superior a 255:

Rojo: 0.2126 * 255 = 54.213 => 55

Verde: 0.7152 * 255 = 182.376 => 183

Azul: 0.0722 * 255 = 18.411 => 19

Luminancia = 55 + 183 + 19 = 257

Este valor hace que la interfaz y, básicamente, todo el sistema operativo, se venga abajo porque excede el valor máximo de 255. Es un error muy poco frecuente porque implica una combinación de un error de redondeo y un error de conversión del espacio de color.

Este error no afecta a Android 11 porque el espacio de color «Skia» de la imagen no se convierte en sRGB por defecto.

Romain Guy, del equipo de Android Toolkit de Google, cree que la causa principal de este problema ha sido la forma en que se calcula la luminancia y no la conversión del espacio de color. Google está llevando a cabo sus propias pruebas internas, así que probablemente pronto veremos un arreglo.