Format obrazu ultra HDR umożliwia przechowywanie większej ilości informacji o intensywności światła, co przekłada się na bardziej szczegółowe podświetlenia i cienie oraz intensywniejsze kolory. Android obsługuje obrazy ultra HDR od wersji 14 (poziom API 34). Jeśli Twoja aplikacja działa w tych wersjach, musisz ją skonfigurować tak, aby prawidłowo wyświetlała te obrazy. Z drugiej strony, jeśli Twoja aplikacja nie wyświetla obrazów ultra HDR, możesz zaoszczędzić zasoby urządzenia, wyłączając wyświetlanie w tym formacie. Z tej strony dowiesz się, jak sprawdzić, czy grafika obsługuje format ultra HDR, i jak ją prawidłowo wyświetlać.
Sprawdzanie, czy występuje mapa wzmocnienia
Obrazy 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ępne od Androida 14), aby sprawdzić, czy ma mapę wzmocnienia.
Konfigurowanie okna do wyświetlania obrazów ultra HDR
Aby wyświetlać obrazy ultra HDR z pełnym zakresem dynamicznym, ustaw tryb koloru okna na ActivityInfo.COLOR_MODE_HDR. Aby to zrobić, wywołaj metodę setColorMode() okna. (Te interfejsy API są dostępne od Androida 8, ale obrazy nie są wyświetlane w formacie ultra HDR, chyba że urządzenie działa w Androidzie 14 lub nowszym).
Łączę wszystko w całość
Poniższy kod pokazuje, jak wygląda cały proces. Ten kod zakłada, że obraz jest wczytany do bitmapy, i sprawdza, czy ma mapę wzmocnienia. Jeśli tak, kod przełącza tryb koloru okna na COLOR_MODE_HDR. Jeśli obraz nie ma mapy wzmocnienia, kod przełącza okno na domyślny tryb koloru.
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 obrazach ultra HDR znajdziesz w tych materiałach:
- Film: tworzenie wysokiej jakości multimediów na Androidzie doświadczenia
- Przykładowa aplikacja: wyświetlanie obrazów ultra HDR
- Specyfikacja formatu obrazu ultra HDR
- Film: historia dewelopera Androida: wczesne wdrożenie formatu ultra HDR przez Instagrama zmienia UX w zaledwie 3 miesiące