Wyświetlaj obrazy ultra HDR

Format obrazu ultra HDR umożliwia przechowywanie większej ilości informacji o intensywności światła, dzięki czemu powstają bardziej szczegółowe podświetlenia i cienie oraz nasycenie kolorów. Android zapewnia obsługę zdjęć ultra HDR już od wersji 14 (poziom API 34). Jeśli Twoja aplikacja działa w tych wersjach, musisz ją odpowiednio skonfigurować, by wyświetlały te obrazy. Z drugiej strony, jeśli w aplikacji nie wyświetlają się obrazy ultra HDR, możesz zaoszczędzić zasoby urządzenia, włączając tę funkcję. Z tego artykułu dowiesz się, jak sprawdzić, czy grafika obsługuje ultra HDR, i jak ją prawidłowo wyświetlić.

Grafika przedstawiająca symulację różnicy między standardowym a wysokim zakresem dynamiki. Grafika przedstawia krajobraz z pochmurnym 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 o wysokim zakresie dynamiki (HDR). Jeśli urządzenie obsługuje HDR, obrazy mogą mieć ciemniejsze cienie i jaśniejsze podświetlenia.

Sprawdź, czy jest dostępna mapa zysku

Zdjęcia ultra HDR zawierają mapę wzmocnienia. Mapa wzmocnienia służy do określania zwiększonej jasności każdego piksela na obrazie. Aby sprawdzić, czy obraz jest w formacie Ultra HDR, przekonwertuj go lub obiekt rysowalny na Bitmap i wywołaj Bitmap.hasGainMap() (dostępny od Androida 14) w celu sprawdzenia, czy ma mapę wzmocnienia.

Skonfiguruj okno pod kątem wyświetlania technologii ultra HDR

Aby wyświetlać obrazy ultra HDR w pełnym zakresie dynamiki, ustaw tryb kolorów okna na ActivityInfo.COLOR_MODE_HDR. Aby to zrobić, wywołaj metodę setColorMode() okna. Te interfejsy API są dostępne na urządzeniach z Androidem 8, ale obrazy nie są wyświetlane w trybie Ultra HDR, chyba że na urządzeniu działa Android 14 lub nowszy.

Podsumowanie

Poniższy kod pokazuje, 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łączy 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 dodatkowych materiałach: