编辑 Ultra HDR 图像

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 图像进行更复杂的编辑,增益图将保持不变,这可能无法达到您想要的结果。

可能导致这种情况的常见编辑包括:

  • 添加贴纸或表情符号:添加的贴纸将具有与粘贴区域相同的亮度和色彩鲜艳度值。
  • 叠加第二张图像:新图像将使用其叠加内容的亮度和色彩鲜艳度信息。
  • 添加滤镜:旧增益图的信息可能不适合修改后的主图像。

在每种情况下,旧的亮度和色彩鲜艳度信息都会保留,但可能不适用于修改后的图像。

如果原始增益图适用于编辑后的图像,则无需执行任何操作。如果您确实要修改增益图,则通常的工作流程是:

  1. 通过调用 Bitmap.getGainmap() 获取图像当前的增益图并将其缓存。
  2. 根据需要修改主图像。
  3. 对缓存的增益图进行相应编辑。例如,如果您将表情符号粘贴到主图像上,您可能需要将增益图的相应部分设置为中性值,例如 Color.GRAY

  4. 通过调用 Bitmap.setGainmap() 将修改后的增益图应用回图像。

其他资源

要了解有关 Ultra HDR 图像的更多信息,请参阅以下其他资源: