ResizeLinear
Adjusts the size of an image.
Before calling the ResizeLinear function, you need to call Init for initialization, call the main function of the ResizeLinear function, and then call Release to release the related space. The image size can be adjusted in the following three ways:
- After the initialization, adjust the size of the entire image, and then release the space.
- After the initialization, adjust the size of each image block, and then release the space.
- Initialize each image block, adjust their size by using the Resize main function, and then release the space.
Currently, only the bilinear interpolation algorithm can be used to adjust the image size.
The function interface is declared as follows:
- Initialization functions
HmppResult HMPPI_ResizeLinearInit_8u(HmppiSize srcSize, HmppiSize dstSize, HmppiResizePolicy_32f** policy);
HmppResult HMPPI_ResizeLinearInit_32f(HmppiSize srcSize, HmppiSize dstSize, HmppiResizePolicy_32f** pSpec);
- Main functions:
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_ResizeLinear_32f_C1R(const float* pSrc, int32_t srcStep, float* pDst, int32_t dstStep, HmppiPoint dstOffset, HmppiSize dstSize, HmppiBorderType border, const float* pBorderValue, const HmppiResizePolicy_32f* pSpec);
- Release functions:
HmppResult HMPPI_ResizeLinearRelease_8u(HmppResizePolicy_32f *policy);
HmppResult HMPPI_ResizeLinearRelease_32f(HmppiResizePolicy_32f *policy);
Parameters
Parameter |
Description |
Value Range |
Input/Output |
|---|---|---|---|
src/pSrc |
Pointer to the source image ROI |
The value cannot be NULL. |
Input |
srcStep |
Distance between starts of consecutive lines in the source image, in bytes |
The value must be zero or a positive integer. |
Input |
srcSize |
Size of the source image block |
Positive integer |
Input |
dst/pDst |
Pointer to the destination image ROI |
The value cannot be NULL. |
Input/Output |
dstStep |
Distance between starts of consecutive lines in the destination image, in bytes |
The value must be zero or a positive integer. |
Input |
dstOffset |
Offset of the destination image block |
The value must be zero or a positive integer. |
Input |
dstSize |
Size of the destination image block |
Positive integer |
Input |
border |
Border handling algorithm |
HMPPI_ResizeLinear_8u_* supports the following algorithms: 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 HMPPI_ResizeLinear_32f_C1R supports the following algorithms: HMPPI_BORDER_REPL HMPPI_BORDER_IN_MEM HMPPI_BORDER_MIRROR HMPPI_BORDER_MIRROR_R |
Input |
borderValue |
Border value |
Border value when border is set to HMPPI_BORDER_CONST |
Input |
policy/pSpec |
Pointer to the special structure |
The value cannot be NULL. |
Input/Output |
Return Value
- Success: HMPP_STS_NO_ERR
- Failure: An error code is returned.
Error Codes
Error Code |
Description |
|---|---|
HMPP_STS_NO_OPERATION |
This is an alarm and no operation is performed. The width or height in srcSize and dstSize is 0. |
HMPP_STS_NULL_PTR_ERR |
A null pointer exists. |
HMPP_STS_MALLOC_FAILED |
Failed to allocate memory during policy initialization. |
HMPP_STS_SIZE_ERR |
The width or height in srcSize and dstSize is a negative value. Alternatively, the value of srcSize is less than 2 x 2. |
HMPP_STS_BORDER_ERR |
The algorithm type for obtaining the border value is not supported. |
HMPP_STS_OUT_OF_RANGE_ERR |
The offset of the destination image block is greater than the width or height of the destination image block input by the Init function. |
HMPP_STS_SIZE_WRN |
The width or height of the destination image block is greater than the width or height of the destination image block input by the Init function. |
Example
#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);
}
Output:
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