使用 Ultra HDR 图片格式,图片可以存储更多有关光照强度的信息,从而生成更加详细的高光和阴影以及更强烈的颜色。从 Android 14(API 级别 34)开始,Android 提供对 Ultra HDR 图片的支持。如果您的应用在这些版本上运行,请务必对应用进行配置,以便正确显示这些图片。另一方面,如果您的应用未显示 Ultra HDR 图片,则可以通过不启用 Ultra HDR 显示来节省设备资源。本页介绍了如何检查图形是否支持 Ultra HDR,以及如何正确显示图形。
![模拟标准动态范围和高动态范围之间的差异的图形。这张图片显示的是多云天空下的风景。右半部分模拟 HDR,具有更明亮的高光、更暗的阴影和更清晰的色彩。](https://developer.android.google.cn/static/media/images/grow/ultrahdr-simulation.png?hl=nb)
检查是否存在增益图
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 图片,请参阅下面列出的其他资源: