Wyświetlaj obrazy ultra HDR

Format zdjęć ultra HDR pozwala przechowywać więcej informacji intensywności światła, co przekłada się na bardziej szczegółowe podświetlenia i cienie i głębsze kolory. Od początku Android zapewnia obsługę obrazów Ultra HDR z Androidem 14 (poziom interfejsu API 34). Jeśli aplikacja działa w tych wersjach, jest to ważne jest, aby skonfigurować aplikację tak, aby poprawnie wyświetlała te obrazy. Z drugiej strony Jeśli aplikacja nie wyświetla obrazów ultra HDR, możesz zapisać urządzenie zasobów, nie włączając wyświetlacza Ultra HDR. Na tej stronie dowiesz się, jak sprawdzić czy grafika obsługuje ultra HDR, i jak ją prawidłowo wyświetlać.

Sprawdź, czy jest dostępna mapa zysku

Zdjęcia ultra HDR zawierają mapę wzmocnienia. Mapa wzmocnienia to używane do określania, jak zwiększyć jasność każdego piksela na obrazie. Aby zweryfikować jeśli obraz jest w formacie Ultra HDR, przekonwertuj go lub rysuj na Bitmap i zadzwoń pod numer Bitmap.hasGainMap() (dostępne od Androida 14), aby sprawdzić, 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 kolor okna do ActivityInfo.COLOR_MODE_HDR. W tym celu wywołaj metodę metody setColorMode() okna. (Te interfejsy API są dostępna na Androidzie 8; ale nie w trybie ultra HDR, chyba że masz urządzenie z Androidem 14 lub nowszym).

Podsumowanie

Poniższy kod pokazuje, jak wygląda cały proces. Ten kod zakłada, że obraz jest wczytywany do bitmapy i sprawdza, czy obraz ma mapę wzmocnienia. Jeśli tak, parametr kod przełączy tryb kolorów okna na COLOR_MODE_HDR. Jeśli obraz nie ma mapy wzmocnienia, kod przełączy okno do domyślnego 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: