该 超高清图像格式 允许图像存储有关光强度的更多信息,从而产生更详细的高光和阴影,以及更强烈的色彩。Android 从 Android 14(API 级别 34)开始提供对超高清图像的支持。如果您的应用在这些版本上运行,则必须配置应用以正确显示这些图像。另一方面,如果您的应用未显示超高清图像,则可以通过不启用超高清显示来节省设备资源。此页面说明如何检查图形是否支持超高清以及如何正确显示它们。
检查增益映射是否存在
超高清图像包含一个 增益映射。增益映射用于确定图像中每个像素的亮度增加。要验证图像是否为超高清格式,请将图像或可绘制对象转换为 Bitmap
并调用 Bitmap.hasGainMap()
(从 Android 14 开始可用)以检查它是否具有增益映射。
配置窗口以显示超高清 HDR
要以完整的动态范围显示超高清 HDR 图像,请将窗口的颜色模式设置为ActivityInfo.COLOR_MODE_HDR
。通过调用窗口的setColorMode()
方法来实现。(这些 API 可从 Android 8 开始使用;但是,除非设备运行 Android 14 或更高版本,否则图像不会以超高清 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);
其他资源
要了解有关超高清 HDR 图像的更多信息,请参阅以下其他资源
- 视频:创建高质量的 Android 媒体体验
- 示例应用:显示超高清 HDR
- 超高清图像格式规范
- 视频:Android 开发者故事:Instagram 早期采用超高清 HDR,仅用 3 个月就改变了用户体验