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.
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:
- Film: Tworzenie wysokiej jakości multimediów na Androida
- Przykładowa aplikacja: Wyświetlanie ultra HDR
- Specyfikacja formatu obrazu ultra HDR