Wyświetlaj obrazy ultra HDR

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 zdjęcia w formacie ultra HDR od wersji Androida 14 (poziom 34 interfejsu API). Jeśli Twoja aplikacja działa w tych wersjach, ważne jest, aby skonfigurować ją tak, aby prawidłowo wyświetlała te obrazy. Z drugiej strony, jeśli aplikacja nie wyświetla obrazów w formacie ultra HDR, możesz zaoszczędzić zasoby urządzenia, wyłączając wyświetlanie w tym formacie. Z tego artykułu dowiesz się, jak sprawdzić, czy grafika obsługuje 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 funkcję Bitmap.hasGainMap() (dostępną od Androida 14), aby sprawdzić, czy zawiera mapę wzmocnienia.

Konfigurowanie okna do wyświetlania Ultra HDR

Aby wyświetlać obrazy w trybie ultra HDR z pełnym zakresem dynamicznym, ustaw tryb koloru okna na ActivityInfo.COLOR_MODE_HDR. W tym celu wywołaj metodę setColorMode() obiektu window. (Te interfejsy API są dostępne od Androida 8, ale obrazy nie są wyświetlane w trybie ultra HDR, chyba że urządzenie ma Androida 14 lub nowszego).

Podsumowanie

Poniższy kod pokazuje, jak wygląda cały proces. Ten kod zakłada, że obraz jest wczytany do mapy bitowej, i sprawdza, czy obraz 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 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: