ウルトラ 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 以降を搭載していない限り、画像は Ultra HDR で表示されません)。
すべてを組み合わせる
次のコードは、プロセス全体の様子を示しています。このコードは、画像が Bitmap に読み込まれていることを前提として、画像にゲインマップがあるかどうかを確認します。そうであれば、コードはウィンドウのカラーモードを 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 画像の詳細については、以下の参考資料をご覧ください。
- 動画: 質の高い Android メディア エクスペリエンスを作成する
- サンプルアプリ: ウルトラ HDR の表示
- ウルトラ HDR 画像形式の仕様
- 動画: Android デベロッパー ストーリー: Instagram がウルトラ HDR を早期に採用し、わずか 3 か月で UX を変革