Wyświetlaj obrazy ultra HDR

Format obrazu ultra HDR pozwala na zapisywanie większej ilości informacji o intensywności oświetlenia, co pozwala uzyskać bardziej szczegółowe podświetlenia i cienie oraz uzyskać bardziej intensywne kolory. Od Androida 14 (poziom interfejsu API 34) Android zapewnia obsługę obrazów ultra HDR. Jeśli Twoja aplikacja korzysta z tych wersji, musisz ją skonfigurować tak, aby obrazy wyświetlały się prawidłowo. Z drugiej strony, jeśli Twoja aplikacja nie wyświetla obrazów ultra HDR, możesz zaoszczędzić zasoby, nie włączając wyświetlacza Ultra HDR. W tym artykule opisujemy, jak sprawdzić, czy grafika obsługuje ultra HDR, i jak wyświetlać ją prawidłowo.

Grafika przedstawiająca symulację różnicy między standardowym zakresem dynamicznym a wysokim zakresem dynamicznym. Grafika przedstawia krajobraz z chmurowym niebem. Prawa połowa (symulująca HDR) ma jaśniejsze podświetlenia, ciemniejsze cienie i wyraźniejsze kolory.
Rysunek 1. Symulacja różnicy między obrazami standardowego zakresu dynamicznego (SDR) a obrazami HDR (High Dynamic Range). Jeśli urządzenie obsługuje HDR, na zdjęciach mogą być ciemniejsze cienie i jaśniejsze podświetlenia.

Sprawdzanie, czy nie ma mapy zysku

Zdjęcia ultra HDR zawierają mapę powiększenia. Mapa wzmocnienia służy do określania zwiększonej jasności każdego piksela na obrazie. Aby sprawdzić, czy zdjęcie jest w formacie Ultra HDR, przekonwertuj je lub rysuj do formatu Bitmap i wywołaj metodę Bitmap.hasGainMap() (dostępne od Androida 14), aby sprawdzić, czy ma mapę wzmocnienia.

Skonfiguruj okno, aby wyświetlać ultra HDR

Aby wyświetlać obrazy ultra HDR w pełnym zakresie dynamicznym, ustaw tryb kolorów okna na ActivityInfo.COLOR_MODE_HDR. Aby to zrobić, wywołaj metodę setColorMode() okna. Te interfejsy API są dostępne od Androida 8, jednak obrazy nie są wyświetlane w trybie ultra HDR, chyba że na urządzeniu jest zainstalowany Android 14 lub nowszy.

Podsumowanie

Poniższy kod ilustruje, jak wygląda cały proces. Zakładamy w nim, że obraz jest wczytywany do bitmapy, i sprawdza, czy ma on mapę wzmocnienia. Jeśli tak, kod przełączy tryb kolorów okna na COLOR_MODE_HDR. Jeśli obraz nie ma mapy wzmocnienia, kod przełącza okno na domyślny tryb kolorów.

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

Dodatkowe materiały

Więcej informacji o zdjęciach ultra HDR znajdziesz w tych materiałach dodatkowych: