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ć.
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