编辑超高清 HDR 图片

超高清 HDR 图片格式编码亮度信息,使设备能够显示更亮、色彩更鲜艳的图像。当您的应用编辑超高清 HDR 图片时,您需要确保保留这些亮度信息。即使用户的设备不支持以全强度显示超高清 HDR 图片,这一点也很重要。毕竟,用户可能会将其图片分享给拥有支持超高清 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 图片的更多信息,请参阅以下其他资源