Muestra imágenes Ultra HDR

El formato de imagen Ultra HDR permite que las imágenes almacenen más información sobre la intensidad de la luz, lo que genera zonas brillantes y sombras más detalladas, y colores más intensos. Android proporciona compatibilidad con imágenes Ultra HDR a partir de Android 14 (nivel de API 34). Si tu app se ejecuta en esas versiones, es importante que la configures para que muestre estas imágenes de forma correcta. Por otro lado, si tu app no muestra imágenes en Ultra HDR, puedes no habilitar la pantalla Ultra HDR para ahorrar recursos del dispositivo. En esta página, se explica cómo comprobar si los gráficos son compatibles con Ultra HDR y cómo mostrarlos correctamente.

Un gráfico en el que se muestra una simulación de la diferencia entre el rango dinámico estándar y el rango dinámico alto. El gráfico muestra un paisaje con el cielo nublado. La mitad derecha, que simula HDR, tiene zonas brillantes más brillantes, sombras más oscuras y colores más claros.
Figura 1: Es una simulación de la diferencia entre las imágenes de rango dinámico estándar (SDR) y las imágenes de alto rango dinámico (HDR). Si un dispositivo admite HDR, las imágenes pueden tener sombras más oscuras y zonas más brillantes.

Comprueba la presencia de un mapa de ganancia

Las imágenes Ultra HDR contienen un mapa de ganancia. El mapa de ganancia se usa para determinar el aumento del brillo de cada píxel en la imagen. Para verificar si una imagen está en formato Ultra HDR, convierte la imagen o el elemento de diseño en un Bitmap y llama a Bitmap.hasGainMap() (disponible a partir de Android 14) para verificar si tiene un mapa de ganancia.

Configura tu ventana para que muestre Ultra HDR

Para mostrar imágenes Ultra HDR con el rango dinámico completo, establece el modo de color de la ventana en ActivityInfo.COLOR_MODE_HDR. Para ello, llama al método setColorMode() de la ventana. (Estas APIs están disponibles a partir de Android 8; sin embargo, las imágenes no se muestran en Ultra HDR, a menos que el dispositivo ejecute Android 14 o una versión posterior).

Resumen

En el siguiente código, se muestra cómo se ve todo el proceso. En este código, se presupone que una imagen está cargada en un mapa de bits y se verifica si tiene un mapa de ganancia. Si lo hace, el código cambia el modo de color de la ventana a COLOR_MODE_HDR. Si la imagen no tiene un mapa de ganancia, el código cambia la ventana al modo de color predeterminado.

Kotlin

val bitmap = /* Get Bitmap from Image Resource */
binding.imageContainer.setImageBitmap(bitmap)

// Set color mode of the activity to the correct color mode.
requireActivity().window.colorMode =
   if (bitmap.hasGainmap()) ActivityInfo.COLOR_MODE_HDR else ActivityInfo.COLOR_MODE_DEFAULT

Java

final Bitmap bitmap = /* Get Bitmap from Image Resource */
binding.imageContainer.setImageBitmap(bitmap);

// Set color mode of the activity to the correct color mode.
int colorMode = ActivityInfo.COLOR_MODE_DEFAULT;
if (bitmap.hasGainmap()) colorMode = ActivityInfo.COLOR_MODE_HDR;
requireActivity().getWindow().setColorMode(colorMode);

Recursos adicionales

Para obtener más información sobre las imágenes Ultra HDR, consulta los siguientes recursos adicionales: