Exibir imagens em Ultra HDR

O formato de imagem Ultra HDR permite que as imagens armazenem mais informações sobre a intensidade da luz, resultando em realces e sombras mais detalhados e cores mais intensas. O Android oferece suporte a imagens Ultra HDR a partir do Android 14 (nível 34 da API). Se o app estiver sendo executado nessas versões, é importante configurá-lo para exibir as imagens corretamente. Por outro lado, se o app não estiver exibindo imagens em Ultra HDR, você poderá economizar recursos do dispositivo desativando a tela Ultra HDR. Esta página explica como verificar se os gráficos oferecem suporte a Ultra HDR e como mostrá-los corretamente.

Um gráfico mostrando uma simulação da diferença entre o alcance dinâmico padrão e o High Dynamic Range. O gráfico mostra uma paisagem com céu nublado. A metade direita, simulando HDR, tem realces mais brilhantes, sombras mais escuras e cores mais claras.
Figura 1. Uma simulação da diferença entre imagens de intervalo dinâmico padrão (SDR) e de High Dynamic Range (HDR). Se um dispositivo for compatível com HDR, as imagens poderão ter sombras mais escuras e realces mais claros.

Verificar a presença de um mapa de ganho

As imagens Ultra HDR contêm um ganho mapa. O mapa de ganho é usado para determinar o aumento de brilho de cada pixel na imagem. Para verificar se uma imagem está no formato Ultra HDR, converta a imagem ou o drawable em uma Bitmap e chame Bitmap.hasGainMap(), disponível desde o Android 14, para conferir se ela tem um mapa de ganho.

Configurar a janela para exibir Ultra HDR

Para mostrar imagens Ultra HDR com toda a faixa dinâmica, defina o modo de cor da janela como ActivityInfo.COLOR_MODE_HDR. Para fazer isso, chame o método setColorMode() da janela. Essas APIs estão disponíveis no Android 8. No entanto, as imagens não são exibidas em Ultra HDR, a menos que o dispositivo esteja executando o Android 14 ou mais recente.

Como tudo funciona em conjunto

O código a seguir mostra como é todo o processo. Esse código presume que uma imagem está carregada em um bitmap e verifica se ela tem um mapa de ganho. Em caso afirmativo, o código muda o modo de cor da janela para COLOR_MODE_HDR. Se a imagem não tiver um mapa de ganho, o código alternará a janela para o modo de cor padrão.

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);

Outros recursos

Para saber mais sobre imagens Ultra HDR, consulte os seguintes recursos: