Cómo editar imágenes Ultra HDR

El formato de imagen Ultra HDR codifica información de luminosidad que permite que los dispositivos muestren imágenes más brillantes con colores más intensos. Cuando tu app edita una imagen en Ultra HDR, debes asegurarte de conservar esa información de luminosidad. Esto es importante incluso si el dispositivo del usuario no admite la visualización de una imagen Ultra HDR con intensidad completa. Después de todo, es posible que el usuario comparta su imagen con alguien que tenga un dispositivo compatible con Ultra HDR o que guarde esa imagen y la vuelva a ver en un dispositivo nuevo años después.

La buena noticia es que la mayoría de los métodos de Android para editar mapas de bits admiten el formato de imagen Ultra HDR. Si realizas ediciones básicas en una imagen, como recortarla o rotarla, los métodos estándar de Android son suficientes. Obtendrás una imagen en Ultra HDR con las nuevas dimensiones u orientación.

El trabajo es más complicado si modificas el contenido de la imagen. En esos casos, los métodos de edición estándar conservan la información de luminosidad de la imagen anterior, lo que podría no ser lo que deseas. En esos casos, es posible que debas editar o quitar el mapa de ganancia (que codifica la información de luminosidad de la imagen) para obtener el resultado correcto.

Descripción general del formato Ultra HDR

El formato de imagen Ultra HDR se describe en detalle en la especificación de imagen Ultra HDR. Lo más importante que debes comprender es que una imagen Ultra HDR contiene una imagen principal y un mapa de ganancia.

  • La imagen principal tiene la información de color de cada píxel de la imagen.
  • El mapa de ganancia es una imagen JPEG estándar con las mismas proporciones que la imagen principal, aunque no necesariamente las mismas dimensiones de píxeles. Cada píxel del mapa de ganancia especifica la luminancia de la parte correspondiente de la imagen principal.

El mapa de ganancia puede ser en escala de grises o en color. Si el mapa de ganancia es en color, cada canal de color del mapa de ganancia especifica la luminancia de ese canal de color en la parte correspondiente de la imagen principal. Si el mapa de ganancia es en escala de grises, cada píxel especifica la luminancia de los tres canales de color en esa parte de la imagen principal.

El mapa de ganancia debe tener las mismas proporciones que la imagen principal, pero no es necesario que tenga las mismas dimensiones de píxeles. De hecho, cuando la plataforma de Android crea imágenes Ultra HDR, genera un mapa de ganancia con un ancho y una altura más pequeños que los de la imagen principal. Esto hace que el tamaño del archivo sea significativamente menor, pero aun así codifica suficiente información para obtener un buen resultado. Esto significa que cada píxel del mapa de ganancia puede almacenar la información de luminancia de varios píxeles de la imagen principal.

Ediciones básicas en Ultra HDR

Si usas las APIs de Bitmap de Android para realizar transformaciones básicas en una imagen Ultra HDR, los métodos realizan los cambios adecuados en el mapa de ganancia. Se admiten las siguientes operaciones de Bitmap:

  • Rotar: Si rotas una imagen Ultra HDR, el método también rota el mapa de ganancia.
  • Recorte: Si recortas una imagen Ultra HDR, el método recorta el mapa de ganancia de forma adecuada.
  • Escala: Si escalas una imagen Ultra HDR, el método escala el mapa de ganancia para que tenga la mitad del ancho y la mitad de la altura de la imagen principal a la que se le cambió el tamaño.

En cada caso, se conserva la información de luminosidad.

Ediciones avanzadas de Ultra HDR

Si realizas ediciones más elaboradas en una imagen Ultra HDR, el mapa de ganancia se conservará sin cambios, lo que podría no brindarte los resultados que deseas.

Entre las ediciones comunes que pueden generar esta situación, se incluyen las siguientes:

  • Agregar calcomanías o emojis: La calcomanía agregada tendría los mismos valores de luminosidad y viveza del color que el área en la que se pegó.
  • Superposición de una segunda imagen: La nueva imagen usaría la información de luminosidad y viveza del color del contenido que superpone.
  • Agregar filtros: Es posible que la información del mapa de ganancia anterior no sea adecuada para la imagen principal modificada.

En cada caso, se conserva la información anterior de luminosidad y viveza del color, pero es posible que no sea adecuada para la imagen modificada.

Si el mapa de ganancia original es adecuado para la imagen editada, no tienes que hacer nada. Si quieres modificar el mapa de ganancia, el flujo de trabajo habitual es el siguiente:

  1. Recupera el mapa de ganancia actual de la imagen llamando a Bitmap.getGainmap() y guárdalo en la caché.
  2. Modifica la imagen principal como desees.
  3. Realiza las ediciones correspondientes en el mapa de ganancia almacenado en caché. Por ejemplo, si pegaste un emoji en la imagen principal, puedes establecer la porción correspondiente del mapa de ganancia en un valor neutral, como Color.GRAY.

  4. Aplica el mapa de ganancia modificado a la imagen llamando a Bitmap.setGainmap().

Recursos adicionales

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