该 Ultra HDR 图像格式 编码亮度信息,使设备能够显示更明亮的图像,并呈现更鲜艳的色彩。当您的应用编辑 Ultra HDR 图像时,您需要确保保留这些亮度信息。即使用户的设备不支持以最大强度显示 Ultra HDR 图像,这一点也很重要。毕竟,用户可能会将其图像分享给拥有支持 Ultra HDR 的设备的人,或者他们可能会保存该图像,并在数年后使用新设备再次查看它。
好消息是,大多数 Android 编辑位图的方法都支持 Ultra HDR 图像格式。如果您正在对图像进行基本的编辑,例如裁剪或旋转,标准的 Android 方法就能胜任——最终您会得到一个具有新尺寸或方向的 Ultra HDR 图像。
如果您要修改图像的内容,情况就会变得更加复杂。在这种情况下,标准的编辑方法会保留旧图像的亮度信息,这可能不是您想要的。在这种情况下,您可能需要编辑或移除增益映射(它编码了图像的亮度信息)才能获得正确的结果。
Ultra HDR 格式概述
Ultra HDR 图像格式在Ultra HDR 图像规范中进行了详细描述。最重要的是要理解 Ultra HDR 图像包含主图像和增益映射。
- 主图像包含图像每个像素的颜色信息。
- 增益映射是一个标准的 JPEG 图像,其比例与主图像相同,但像素尺寸不一定相同。增益映射的每个像素指定主图像对应部分的亮度。
增益映射可以是灰度或彩色。如果增益映射是彩色的,则增益映射上的每个颜色通道指定主图像对应部分上该颜色通道的亮度。如果增益映射是灰度的,则增益映射的每个像素指定该部分主图像上所有三个颜色通道的亮度。
增益映射必须与主图像具有相同的比例,但不必具有相同的像素尺寸。实际上,当 Android 平台创建 Ultra HDR 图像时,它会创建一个宽度和高度小于主图像的增益映射;这样做可以使文件大小显著减小,但仍然可以编码足够的信息以获得良好的结果。这意味着增益映射中的每个像素可能存储主图像中几个像素的亮度信息。
基本的 Ultra HDR 编辑
如果您使用 Android Bitmap
API 对 Ultra HDR 图像进行基本转换,则这些方法会对增益映射进行相应的更改。以下Bitmap
操作受支持
- 旋转:如果您旋转 Ultra HDR 图像,该方法也会旋转增益映射。
- 裁剪:如果您裁剪 Ultra HDR 图像,该方法会相应地裁剪增益映射。
- 缩放:如果您缩放 Ultra HDR 图像,该方法会缩放增益映射,使其宽度和高度均为调整大小后的主图像的一半。
在每种情况下,亮度信息都会被保留。
高级 Ultra HDR 编辑
如果您对 Ultra HDR 图像进行更复杂的编辑,则增益映射会保持不变,这可能无法提供您想要的结果。
可能导致这种情况的常见编辑包括
- 添加贴纸或表情符号:添加的贴纸将具有与粘贴区域相同的亮度和颜色鲜艳度值。
- 覆盖第二个图像:新图像将使用其覆盖内容的亮度和颜色鲜艳度信息。
- 添加滤镜:旧的增益映射信息可能不适用于修改后的主图像。
在每种情况下,都会保留旧的亮度和颜色鲜艳度信息,但它可能不适用于修改后的图像。
如果原始增益映射适用于编辑后的图像,则您无需执行任何操作。如果您确实想要修改增益映射,则通常的工作流程是
- 获取图像当前的增益映射,方法是调用
Bitmap.getGainmap()
并将其缓存。 - 根据需要修改主图像。
对缓存的增益映射进行相应的编辑。例如,如果您将表情符号粘贴到主图像上,您可能会将增益映射的对应部分设置为中性值,例如
Color.GRAY
。将修改后的增益映射应用回图像,方法是调用
Bitmap.setGainmap()
。
其他资源
要了解有关 Ultra HDR 图像的更多信息,请参阅以下其他资源