图片缩放
本模块提供图片细节增强的C API接口,通过调用本模块,可以实现图片内容的清晰度增强及缩放功能,处理后的数据可以用于送显和编码保存。
典型应用场景如:图片解码获取图片buffer > 图片超分 > 显示。
约束与限制
-
为保证处理能够实时响应,建议只创建一个实例。
-
当前仅支持处理同时满足以下条件的图片:
- 图片为SDR(Standard dynamic range)图片。
- 图片的像素格式为RGBA、BGRA、NV12、NV21,输出格式与输入格式一致。
- 处理的PixelMap对象需为DMA内存。
-
本模块提供4个质量档位的算法,处理效果逐渐变优,但性能也会逐渐下降。
质量档位 输入分辨率要求 (单位:像素) 输出分辨率要求 (单位:像素) 说明 NONE 宽:[32,3000] 高:[32,3000] 宽:[32,3000] 高:[32,3000] 仅适用于缩放场景,支持改变宽高比例,无清晰度增强效果。 LOW 宽:[32,3000] 高:[32,3000] 宽:[32,3000] 高:[32,3000] 仅适用于缩放场景,支持改变宽高比例。 缩放时会对图像进行低质量的清晰度增强,处理效率较高。 此质量档位为默认设置。 MEDIUM 宽:[32,3000] 高:[32,3000] 宽:[32,3000] 高:[32,3000] 仅适用于缩放场景,支持改变宽高比例。 缩放时会对图像进行中等质量的清晰度增强,处理效率适中。 HIGH 宽:[512,2000] 高:[512,2000] 宽:[512,2000] 高:[512,2000] 适用于缩放及清晰度增强场景,支持改变宽高比例。 缩放时会对图像进行高质量的清晰度增强,处理效率相对较低。
开发指导
具体实现可参考示例工程。
在 CMake 脚本中链接动态库
add_library(entry SHARED napi_init.cpp ImageProcessing/ImageProcessing.cpp)
target_link_libraries(entry PUBLIC ${BASE_LIBRARY})
开发步骤
-
添加头文件。
#include <hilog/log.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 <multimedia/player_framework/native_avformat.h>#include <napi/native_api.h> -
(可选)初始化环境。
一般在进程内第一次使用时调用,可提前完成部分耗时操作。
ImageProcessing_ErrorCode ret = OH_ImageProcessing_InitializeEnvironment(); -
创建细节增强模块。
应用可以通过图片处理引擎模块类型来创建图片细节增强模块。示例中的变量说明如下:
- imageProcessor:细节增强模块实例。
- IMAGE_PROCESSING_TYPE_DETAIL_ENHANCER:细节增强类型。
- 预期返回值:IMAGE_PROCESSING_SUCCESS
// 创建图片细节增强模块实例OH_ImageProcessing* imageProcessor = nullptr;ImageProcessing_ErrorCode ret = OH_ImageProcessing_Create(&imageProcessor, IMAGE_PROCESSING_TYPE_DETAIL_ENHANCER); -
(可选)配置细节增强质量档位,当前有高中低三档及NONE可选,若不配置则默认质量档位为LOW档。
// 创建format实例OH_AVFormat* parameter = OH_AVFormat_Create();// 指定质量档位OH_AVFormat_SetIntValue(parameter, IMAGE_DETAIL_ENHANCER_PARAMETER_KEY_QUALITY_LEVEL,IMAGE_DETAIL_ENHANCER_QUALITY_LEVEL_HIGH);// 配置参数ImageProcessing_ErrorCode ret = OH_ImageProcessing_SetParameter(imageProcessor,parameter); -
启动细节增强处理。
// 启动细节增强处理ImageProcessing_ErrorCode ret = OH_ImageProcessing_EnhanceDetail(imageProcessor, srcImage, dstImage); -
释放处理实例。
ImageProcessing_ErrorCode ret = OH_ImageProcessing_Destroy(imageProcessor);imageProcessor = nullptr; -
释放处理资源。
OH_ImageProcessing_DeinitializeEnvironment();
完整示例代码
ArkTS示例代码:
C++相关示例代码: