图片缩放
====

本模块提供图片细节增强的[C API接口](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/capi-imageprocessing)，通过调用本模块，可以实现图片内容的清晰度增强及缩放功能，处理后的数据可以用于送显和编码保存。

典型应用场景如：图片解码获取图片buffer > 图片超分 > 显示。

#### 约束与限制

1.  为保证处理能够实时响应，建议只创建一个实例。
    
2.  当前仅支持处理同时满足以下条件的图片：
    
    *   图片为SDR（Standard dynamic range）图片。
    *   图片的像素格式为RGBA、BGRA、NV12、NV21，输出格式与输入格式一致。
    *   处理的PixelMap对象需为[DMA内存](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/image-allocator-type-c#内存类型介绍)。
3.  本模块提供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\]
    
     | 
    
    适用于缩放及清晰度增强场景，支持改变宽高比例。
    
    缩放时会对图像进行高质量的清晰度增强，处理效率相对较低。
    
     |
    

#### 开发指导

具体实现可参考[示例工程](https://gitcode.com/HarmonyOS_Samples/DocsSample_MultiMedia/tree/master/UsingImageProcessingToProcessImages)。

#### \[h2\]在 CMake 脚本中链接动态库

add\_library(entry SHARED napi\_init.cpp ImageProcessing/ImageProcessing.cpp)
target\_link\_libraries(entry PUBLIC ${BASE\_LIBRARY})

#### \[h2\]开发步骤

1.  添加头文件。
    
    #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>
    
2.  （可选）初始化环境。
    
    一般在进程内第一次使用时调用，可提前完成部分耗时操作。
    
    ImageProcessing\_ErrorCode ret =  OH\_ImageProcessing\_InitializeEnvironment();
    
3.  创建细节增强模块。
    
    应用可以通过图片处理引擎模块类型来创建图片细节增强模块。示例中的变量说明如下：
    
    *   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);
    
4.  （可选）配置细节增强质量档位，当前有高中低三档及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);
    
5.  启动细节增强处理。
    
    // 启动细节增强处理
    ImageProcessing\_ErrorCode ret = OH\_ImageProcessing\_EnhanceDetail(imageProcessor, srcImage, dstImage);
    
6.  释放处理实例。
    
    ImageProcessing\_ErrorCode ret = OH\_ImageProcessing\_Destroy(imageProcessor);
    imageProcessor = nullptr;
    
7.  释放处理资源。
    
    OH\_ImageProcessing\_DeinitializeEnvironment();
    

#### 完整示例代码

ArkTS示例代码：

*   [ImageScalingComponent.ets示例代码](https://gitcode.com/HarmonyOS_Samples/DocsSample_MultiMedia/blob/master/UsingImageProcessingToProcessImages/entry/src/main/ets/view/ImageScalingComponent.ets)

C++相关示例代码：

*   [CMakeLists.txt示例代码](https://gitcode.com/HarmonyOS_Samples/DocsSample_MultiMedia/blob/master/UsingImageProcessingToProcessImages/entry/src/main/cpp/CMakeLists.txt)
    
*   [ImageProcessing.h示例代码](https://gitcode.com/HarmonyOS_Samples/DocsSample_MultiMedia/blob/master/UsingImageProcessingToProcessImages/entry/src/main/cpp/ImageProcessing/ImageProcessing.h)
    
*   [ImageProcessing.cpp示例代码](https://gitcode.com/HarmonyOS_Samples/DocsSample_MultiMedia/blob/master/UsingImageProcessingToProcessImages/entry/src/main/cpp/ImageProcessing/ImageProcessing.cpp)