ウルトラ HDR 画像を表示する

ウルトラ HDR 画像形式では、画像の光の強さに関する情報をより多く保存できるため、ハイライトとシャドウのディテールが向上し、色がより鮮やかになります。Android では、Android 14(API レベル 34)以降でウルトラ HDR 画像をサポートしています。これらのバージョンでアプリが実行されている場合は、 これらの画像を適切に表示するようにアプリを構成することが重要です。一方、アプリでウルトラ HDR 画像が表示されない場合は、ウルトラ HDR 表示を有効にしないことでデバイスのリソースを節約できます。このページでは、グラフィックがウルトラ HDR をサポートしているかどうかを確認する方法と、適切に表示する方法について説明します。

ゲインマップの有無を確認する

ウルトラ HDR 画像にはゲインマップが含まれています。ゲインマップは 画像の各ピクセルの輝度を上げるために使用されます。画像がウルトラ HDR 形式かどうかを確認するには、画像またはドローアブルを Bitmap に変換し、Bitmap.hasGainMap() (Android 14 以降で使用可能)を呼び出して、ゲインマップがあるかどうかを確認します。

ウルトラ HDR を表示するようにウィンドウを構成する

ウルトラ HDR 画像をフル ダイナミック レンジで表示するには、ウィンドウの色 モードを ActivityInfo.COLOR_MODE_HDRに設定します。これを行うには、 ウィンドウの setColorMode() メソッドを呼び出します。(これらの API は Android 8 以降で使用できますが、デバイスが Android 14 以降を実行していない限り、画像はウルトラ HDR で表示されません)。

すべてを組み合わせる

次のコードは、プロセス全体を示しています。このコードは、画像 がビットマップに読み込まれていることを前提として、画像にゲインマップがあるかどうかを確認します。ゲインマップがある場合は、 ウィンドウの色モードをCOLOR_MODE_HDRに切り替えます。画像にゲインマップがない場合は、ウィンドウをデフォルトの色モードに切り替えます。

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);

参考情報

ウルトラ HDR 画像について詳しくは、以下の参考情報をご確認ください。