Ultra HDR 图片格式允许图片存储有关光强度的更多信息,从而生成更详细的高光和阴影以及更强烈的色彩。从 Android 14(API 级别 34)开始,Android 开始支持 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 格式显示。)
两种方式对比
下面的代码展示了整个过程。此代码假定图像已加载到位图中,并检查图像是否有增益图。如果是,代码会将窗口的颜色模式切换为 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 图片,请参阅下面列出的其他资源: