显示 Ultra HDR 图片

Ultra HDR 图片格式可让图片存储更多信息 从而产生更细致的高光和阴影, 以及更强烈的色彩。Android 开始支持 Ultra HDR 图片 搭载 Android 14(API 级别 34)。如果您的应用在这些版本上运行, 务必要配置您的应用以正确显示这些图片。另一个 如果您的应用未显示 Ultra HDR 图片 因为未启用 Ultra HDR 显示屏。本页将介绍如何检查 图片是否支持 Ultra HDR,以及如何正确显示这些图片。

一张模拟图,显示了标准动态范围和高动态范围之间的差异。这张图片显示的是多云天空下的风景。右半部分模拟 HDR,具有更明亮的高光、更深的阴影和更清晰的色彩。
图 1. 对标准 动态范围 (SDR) 和高动态范围 (HDR) 图片。如果设备支持 采用 HDR 格式时,图片的阴影可能较暗,高光部分也可能较亮。

检查是否存在增益图

Ultra HDR 图片包含一个增益图。增益图为 用于确定图片中每个像素的调高亮度。进行验证 如果图片是 Ultra HDR 格式,请将该图片或可绘制对象转换为 Bitmap 并调用 Bitmap.hasGainMap() (从 Android 14 开始提供)以检查它是否有增益图。

将您的窗口配置为显示 Ultra HDR

如需显示具有完整动态范围的 Ultra HDR 图片,请设置窗口的颜色 模式更改为 ActivityInfo.COLOR_MODE_HDR。为此,您可以调用 窗口的 setColorMode() 方法。(这些 API 是 从 Android 8 开始提供;不过,除非 设备搭载 Android 14 或更高版本)。

总结

下面的代码展示了整个过程。此代码假设 并检查图像是否有增益图。如果需要, 代码会将窗口的颜色模式切换为 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);

其他资源

如需详细了解 Ultra HDR 图片,请参阅下面列出的其他资源: