显示 Ultra HDR 图片

Ultra HDR 图片格式允许图片存储有关光强度的更多信息,从而生成更详细的高光和阴影以及更强烈的色彩。从 Android 14(API 级别 34)开始,Android 开始支持 Ultra HDR 图片。如果您的应用在这些版本上运行,请务必对应用进行配置,使其正确显示这些图片。另一方面,如果您的应用未显示 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 或更高版本,否则图片不会以 Ultra 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);

其他资源

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