---
title: ResizeLinear
description: "此类函数用于调整图像大小，属于图像几何变换的一类功能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2200/accel/kunpengaccel_hmpp_06_0190.html
sourcePath: /source/zh/kunpengboostkithistory/2200/accel/kunpengaccel_hmpp_06_0190.html
indexId: 18c58b0dd8d5aeffc9f6e37e89684e9c9dedd4441ec4adc12d72e1e6101a5cb175
---
# ResizeLinear

此类函数用于调整图像大小，属于图像几何变换的一类功能。

在调用ResizeLinear函数之前需要先调用Init函数进行初始化，然后调用ResizeLinear主功能函数，最后调用Release函数释放相关空间。对于Resize类函数，主要有以下三种处理方式调整图像大小：

- Init之后，调整整个图像的大小，最后Release。
- Init之后，对每一个图像块调整大小，最后Release。
- 对每个图像块进行Init，之后通过Resize主函数调整大小，最后Release。

目前仅支持双线性插值算法进行图像大小调整。

函数接口声明如下：

- 初始化函数：
  HmppResult HMPPI_ResizeLinearInit_8u(HmppiSize srcSize, HmppiSize dstSize, HmppiResizePolicy_32f** policy);

- 主函数：
  HmppResult HMPPI_ResizeLinear_8u_C3R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiPoint dstOffset, HmppiSize dstSize, HmppiBorderType border, const uint8_t *borderValue, const HmppResizePolicy_32f *policy);

  HmppResult HMPPI_ResizeLinear_8u_C4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiPoint dstOffset, HmppiSize dstSize, HmppiBorderType border, const uint8_t *borderValue, const HmppResizePolicy_32f *policy);

- 释放函数：
  HmppResult HMPPI_ResizeLinearRelease_8u(HmppResizePolicy_32f *policy);


#### 参数

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| src | 指向源图像感兴趣区域的指针。 | 非空 | 输入 |
| srcStep | 源图像中连续行起点之间的距离（以字节为单位）。 | 非负整数 | 输入 |
| srcSize | 源图像块的大小。 | 正整数 | 输入 |
| dst | 指向目标图像感兴趣区域的指针。 | 非空 | 输入/输出 |
| dstStep | 目标图像中连续行的起点之间的距离（以字节为单位）。 | 非负整数 | 输入 |
| dstOffset | 目标图像块的偏移值。 | 非负整数 | 输入 |
| dstSize | 目标图像块的大小。 | 正整数 | 输入 |
| border | 边界取值算法。 | 目前支持如下算法： HMPPI\_BORDER\_REPL HMPPI\_BORDER\_IN\_MEM HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_BOTTOM HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_TOP HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_LEFT HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_RIGHT HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_RIGHT \| HMPPI\_BORDER\_IN\_MEM\_BOTTOM HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_RIGHT \| HMPPI\_BORDER\_IN\_MEM\_TOP HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_LEFT \| HMPPI\_BORDER\_IN\_MEM\_BOTTOM HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_LEFT \| HMPPI\_BORDER\_IN\_MEM\_TOP HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_RIGHT \| HMPPI\_BORDER\_IN\_MEM\_BOTTOM \| HMPPI\_BORDER\_IN\_MEM\_LEFT HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_RIGHT \| HMPPI\_BORDER\_IN\_MEM\_TOP \| HMPPI\_BORDER\_IN\_MEM\_BOTTOM HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_LEFT \| HMPPI\_BORDER\_IN\_MEM\_BOTTOM \| HMPPI\_BORDER\_IN\_MEM\_TOP HMPPI\_BORDER\_REPL \| HMPPI\_BORDER\_IN\_MEM\_LEFT \| HMPPI\_BORDER\_IN\_MEM\_TOP \| HMPPI\_BORDER\_IN\_MEM\_RIGHT ER\_REPL \| HMPPI\_BORDER\_IN\_MEM | 输入 |
| borderValue | 边界值。 | border为HMPPI\_BORDER\_CONST时边界值 | 输入 |
| policy | 特殊结构体的指针。 | 非空 | 输入/输出 |


#### 返回值

- 成功：返回HMPP_STS_NO_ERR。
- 失败：返回错误码。


#### 错误码

| 错误码 | 描述 |
| --- | --- |
| HMPP\_STS\_NO\_OPERATION | 告警，不进行操作。srcSize和dstSize中width、height存在零。 |
| HMPP\_STS\_NULL\_PTR\_ERR | 传入的任意一个指针存在空指针。 |
| HMPP\_STS\_MALLOC\_FAILED | Policy初始化时内存申请失败。 |
| HMPP\_STS\_SIZE\_ERR | srcSize和dstSize中width、height存在负值。 或srcSize小于2x2。 |
| HMPP\_STS\_BORDER\_ERR | 边界算法类型不支持。 |
| HMPP\_STS\_OUT\_OF\_RANGE\_ERR | 目标图像块偏移值比Init函数输入的目标图像块的width/height大。 |
| HMPP\_STS\_SIZE\_WRN | 目标图像块width/height比Init函数输入的目标图像块的width/height大。 |


#### 示例

```
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "hmppi.h"
#include "hmpps.h"
int main ()
{
HmppiResizePolicy_32f *policy = NULL;
HmppiSize srcSize = {2, 2};
HmppiSize dstSize = {4, 4};
int32_t numChannels = 3;
HmppiBorderType borderType = HMPPI_BORDER_REPL;
const uint8_t borderValue = 0;
HmppResult result = 0;
HmppiPoint dstOffset = {0, 0};
uint8_t src[12] = {0, 255, 3, 6, 255, 0,
2, 1,   3, 4, 134, 23};
int32_t dstLen = dstSize.width * dstSize.height * numChannels;
uint8_t *dst = HMPPS_Malloc_8u(dstLen);
result = HMPPI_ResizeLinearInit_8u(srcSize, dstSize, &policy);
printf("result = %d\n", result);
int32_t srcStep = srcSize.width * numChannels * sizeof(uint8_t);
int32_t dstStep = dstSize.width * numChannels * sizeof(uint8_t);
result = HMPPI_ResizeLinear_8u_C3R(src, srcStep, dst, dstStep, dstOffset, dstSize, borderType, &borderValue, policy);
printf("result = %d\n", result);
HMPPI_ResizeLinearRelease_8u(policy);
printf("free policy end\n");
for (int32_t i = 0; i < dstLen; i++) {
printf("%d ", dst[i]);
}
printf("\n");
HMPPS_Free(dst);
}
```

运行结果：

```
result = 0
result = 0
free policy end
0 255 3 2 255 2 5 255 1 6 255 0 1 192 3 2 200 4 4 216 5 6 225 6 2 65 3 2 89 7 4 139 14 5 164 17 2 1 3 3 34 8 4 101 18 4 134 23
```
