鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

ResizeNearest

用于调整图像大小,使用最近邻插值算法,属于图像几何变换的一类功能。

在调用ResizeNearest函数之前需要先调用Init函数进行初始化,然后调用ResizeLinear主功能函数,最后调用Release函数释放相关空间。

函数接口声明如下:

  • 初始化函数:

    HmppResult HMPPI_ResizeNearestInit_32f(HmppiSize srcSize, HmppiSize dstSize, HmppiResizePolicy_32f **pSpec);

  • 主函数:

    HmppResult HMPPI_ResizeNearest_32f_C1R(const float *pSrc, int srcStep, float *pDst, int dstStep, HmppiPoint dstOffset, HmppiSize dstSize, const HmppiResizePolicy_32f *pSpec);

  • 释放函数:

    HmppResult HMPPI_ResizeNearestRelease_32f(HmppiResizePolicy_32f *policy);

参数

参数名

描述

取值范围

输入/输出

pSrc

指向源图像感兴趣区域的指针。

非空

输入

srcStep

源图像中连续行起点之间的距离(以字节为单位)。

非负整数

输入

srcSize

源图像块的大小。

正整数

输入

pDst

指向目标图像感兴趣区域的指针。

非空

输入/输出

dstStep

目标图像中连续行的起点之间的距离(以字节为单位)。

非负整数

输入

dstOffset

目标图像块的偏移值。

非负整数

输入

dstSize

目标图像块的大小。

正整数

输入

pSpec

特殊结构体的指针。

非空

输入/输出

返回值

  • 成功:返回HMPP_STS_NO_ERR。
  • 失败:返回错误码。

错误码

错误码

描述

HMPP_STS_NO_OPERATION

告警,不进行操作。srcSize和dstSize中width、height存在零。

HMPP_STS_NULL_PTR_ERR

传入的任意一个指针存在空指针。

HMPP_STS_MALLOC_FAILED

pSpec初始化时内存申请失败。

HMPP_STS_SIZE_ERR

srcSize和dstSize中width、height存在负值。

HMPP_STS_STEP_ERR

  • srcStep或dstStep不是float字节长度的整数倍。
  • srcStep或dstStep小于srcwidth或dstwidth乘以float字节长度。

HMPP_STS_BORDER_ERR

边界算法类型不支持。

HMPP_STS_OUT_OF_RANGE_ERR

目标图像块偏移值比Init函数输入的目标图像块的width或height大。

HMPP_STS_SIZE_WRN

目标图像块width/height比Init函数输入的目标图像块的width或height大。

示例

void ResizeNearestExample()
{
    HmppiSize srcSize = {3, 3};
    HmppiSize dstSize = {6, 6};
    HmppiPoint dstOffset = {0, 0};
    int srcStep = srcSize.width * sizeof(float);
    int dstStep = dstSize.width * sizeof(float);
    HmppiResizePolicy_32f *pSpec; 
    float pSrc[] = {0.0, 255.0, 3.0, 6.0, 255.0, 0.0, 2.0, 1.0, 3.0};
    int dstLen = dstSize.width * dstSize.height;
    float *pDst = HMPPS_Malloc_32f(dstLen);
    HMPPI_ResizeNearestInit_32f(srcSize, dstSize, &pSpec);
    HmppResult result = HMPPI_ResizeNearest_32f_C1R (
        pSrc, srcStep, pDst, dstStep, dstOffset, dstSize, &pSpec);
    printf("result = %d\n", result);
    if (result != HMPP_STS_NO_ERR) {
        return;
    } 
    for (int i = 0; i < dstLen; i++){
        printf("%f ", pDst[i]);
    }
    printf("\n");
    HMPPI_ResizeNearestRelease_32f(pSpec);
}

运行结果:

result = 0
0.000000 255.000000 255.000000 3.000000 3.000000 0.000000 6.000000 255.000000 255.000000 0.000000 0.000000 0.000000 6.000000 255.000000 255.000000 0.000000 0.000000 0.000000 2.000000 1.000000 1.000000 3.000000 3.000000 0.000000 2.000000 1.000000 1.000000 3.000000 3.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000