图片动态元数据生成
调用者可以调用本模块提供的C API接口,实现HDR图片动态元数据生成。
该能力常用于图片编辑中,如下图所示:

规格说明
支持的数据输入格式:
| 输入ColorSpaceName | 输入HdrMetadataType | 输入PIXEL_FORMAT |
|---|---|---|
| BT2020_PQ_LIMIT / BT2020_PQ | HDR_METADATA_TYPE_ALTERNATE | PIXEL_FORMAT_YCBCR_P010 / PIXEL_FORMAT_YCRCB_P010 / PIXEL_FORMAT_RGBA_1010102 |
| BT2020_HLG_LIMIT / BT2020_HLG | HDR_METADATA_TYPE_ALTERNATE | PIXEL_FORMAT_YCBCR_P010 / PIXEL_FORMAT_YCRCB_P010 / PIXEL_FORMAT_RGBA_1010102 |
| BT2020_PQ_LIMIT / BT2020_PQ | HDR_METADATA_TYPE_BASE | PIXEL_FORMAT_YCBCR_P010 / PIXEL_FORMAT_YCRCB_P010 / PIXEL_FORMAT_RGBA_1010102 |
| BT2020_HLG_LIMIT / BT2020_HLG | HDR_METADATA_TYPE_BASE | PIXEL_FORMAT_YCBCR_P010 / PIXEL_FORMAT_YCRCB_P010 / PIXEL_FORMAT_RGBA_1010102 |
| BT2020_PQ_LIMIT / BT2020_PQ | HDR_METADATA_TYPE_NONE | PIXEL_FORMAT_YCBCR_P010 / PIXEL_FORMAT_YCRCB_P010 / PIXEL_FORMAT_RGBA_1010102 |
| BT2020_HLG_LIMIT / BT2020_HLG | HDR_METADATA_TYPE_NONE | PIXEL_FORMAT_YCBCR_P010 / PIXEL_FORMAT_YCRCB_P010 / PIXEL_FORMAT_RGBA_1010102 |
分辨率规格:
| 最小分辨率(单位:像素) | 最大分辨率(单位:像素) |
|---|---|
| 32*32 | 8880*8880 |
内存规格:
处理的PixelMap对象需为DMA内存。
开发指导
具体实现可参考示例工程。
在 CMake 脚本中链接动态库
add_library(entry SHARED napi_init.cpp ImageProcessing/ImageProcessing.cpp)
target_link_libraries(entry PUBLIC ${BASE_LIBRARY})
ArkTS侧调用的开发步骤
-
通过解码器获取10 bit的PixelMap。
const photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;photoSelectOptions.maxSelectNumber = 1;const photoViewPicker = new photoAccessHelper.PhotoViewPicker();photoViewPicker.select(photoSelectOptions).then((photoSelectResult: photoAccessHelper.PhotoSelectResult) => {let fd = fileIo.openSync(photoSelectResult.photoUris[0], fileIo.OpenMode.READ_ONLY);const imageSource = image.createImageSource(fd.fd);let option: image.DecodingOptions = {};option.index = 0;option.desiredDynamicRange = image.DecodingDynamicRange.AUTO;this.pixelMapSrc = imageSource.createPixelMapSync(option);this.getColorSpace();this.hasPhoto = true;}) -
配置色彩框架和元数据信息。
let colorSpaceBT2020_HLG : colorSpaceManager.ColorSpaceManager = colorSpaceManager.create(colorSpaceManager.ColorSpace.BT2020_HLG);hdrpixelMap.setColorSpace(colorSpaceBT2020_HLG);hdrpixelMap.setMetadata(image.HdrMetadataKey.HDR_METADATA_TYPE, image.HdrMetadataType.ALTERNATE);
Native侧调用的开发步骤
-
添加头文件。
#include <multimedia/image_framework/image_mdk_common.h>#include <multimedia/image_framework/image_pixel_map_mdk.h>#include <multimedia/image_framework/image/pixelmap_native.h>#include <multimedia/video_processing_engine/image_processing.h>#include <multimedia/video_processing_engine/image_processing_types.h>#include <native_color_space_manager/native_color_space_manager.h> -
(可选)初始化环境。
一般在进程内第一次使用时调用,可提前完成部分耗时操作。
ImageProcessing_ErrorCode ret = OH_ImageProcessing_InitializeEnvironment(); -
(可选)查询能力支持。建议在使用对应能力前调用。
//输入格式ImageProcessing_ColorSpaceInfo SRC_INFO;SRC_INFO.colorSpace = BT2020_HLG;SRC_INFO.metadataType = HDR_METADATA_TYPE_ALTERNATE;SRC_INFO.pixelFormat = PIXEL_FORMAT_RGBA_1010102;//能力查询bool flag = OH_ImageProcessing_IsMetadataGenerationSupported(&SRC_INFO); -
将ArkTS中的PixelMap转换为C++的PixelMap。
OH_PixelmapNative* hdr = nullptr;OH_PixelmapNative_ConvertPixelmapNativeFromNapi(env, argValue[0], &hdr); -
创建图片元数据生成模块。
-
应用可以通过图片处理引擎模块类型来创建图片元数据生成模块。示例中的变量说明如下:
instance:图片处理模块实例。
IMAGE_PROCESSING_TYPE_METADATA_GENERATION:图片元数据生成类型。
预期返回值:IMAGE_PROCESSING_SUCCESS
OH_ImageProcessing* instance = nullptr;ret = OH_ImageProcessing_Create(&instance, IMAGE_PROCESSING_TYPE_METADATA_GENERATION); -
执行算法。
ret = OH_ImageProcessing_GenerateMetadata(instance, hdr); -
释放实例资源。
ret = OH_ImageProcessing_Destroy(instance);instance = nullptr; -
释放初始化环境资源。
ret = OH_ImageProcessing_DeinitializeEnvironment();
完整示例代码
ArkTS示例代码:
C++相关示例代码: