Ultra HDR 图片格式可让图片存储更多有关光强度的信息,从而呈现更细致的高光和阴影,以及更鲜艳的色彩。Android 从 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 图片,请参阅下面列出的其他资源:
- 视频:打造优质的 Android 媒体体验
- 示例应用:显示 Ultra HDR
- Ultra HDR 图片格式规范
- 视频:Android 开发者故事:Instagram 率先采用 Ultra HDR,仅用 3 个月就改变了用户体验