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 个月就改变了用户体验