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.](https://developer.android.google.cn/static/media/images/grow/ultrahdr-simulation.png?authuser=1&hl=pl)
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:
- Film: Tworzenie wysokiej jakości multimediów na Androida
- Przykładowa aplikacja: Wyświetlanie ultra HDR
- Specyfikacja formatu obrazu ultra HDR