ウルトラ 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 画像について詳しくは、以下の参考情報をご確認ください。