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

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

標準ダイナミック レンジとハイ ダイナミック レンジの違いのシミュレーションを示すグラフィック曇り空のある風景を示しています。HDR をシミュレートした右半分は、ハイライトが明るく、シャドウが暗く、色が鮮明になっています。
図 1: 標準ダイナミック レンジ(SDR)画像とハイ ダイナミック レンジ(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 画像について詳しくは、以下の参考情報をご覧ください。