显示 Ultra HDR 图像

借助 Ultra HDR 图像格式,图像可以存储更多关于光强度的数据,从而呈现更精细的高光和阴影,以及更鲜艳的色彩。Android 14(API 级别 34)及更高版本开始支持 Ultra HDR 图像。如果您的应用运行在这些版本上,务必配置您的应用以正确显示这些图像。另一方面,如果您的应用不显示 Ultra HDR 图像,则可以通过不启用 Ultra HDR 显示来节省设备资源。本页介绍了如何检查图形是否支持 Ultra 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 格式显示。)

汇总

以下代码显示了整个过程。此代码假设图像已加载到 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);

其他资源

要详细了解 Ultra HDR 图像,请参阅以下其他资源: