我要评分
获取效率
正确性
完整性
易理解

Copy

Copies pixel values from the source image buffer to the destination image buffer.

The function interface declaration is as follows:

  • Copying all pixels of all color channels:

    HmppResult HMPPI_Copy_8u_C1R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C1R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C1R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C1R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C1R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C3R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C3R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C3R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C3R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C3R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C4R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C4R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C4R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C4R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_AC4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_AC4R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_AC4R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_AC4R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_AC4R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C3AC4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C3AC4R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C3AC4R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C3AC4R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C3AC4R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_AC4C3R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_AC4C3R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_AC4C3R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_AC4C3R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_AC4C3R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

  • Copying masked pixels:

    HmppResult HMPPI_Copy_8u_C1MR(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16u_C1MR(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16s_C1MR(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32s_C1MR(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32f_C1MR(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_8u_C3MR(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16u_C3MR(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16s_C3MR(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32s_C3MR(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32f_C3MR(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_8u_C4MR(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16u_C4MR(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16s_C4MR(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32s_C4MR(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32f_C4MR(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_8u_AC4MR(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16u_AC4MR(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_16s_AC4MR(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32s_AC4MR(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

    HmppResult HMPPI_Copy_32f_AC4MR(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize, const uint8_t *mask, int32_t maskStep);

  • Copying the pixels of a selected channel in a multi-channel image:

    HmppResult HMPPI_Copy_8u_C3CR(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C3CR(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C3CR(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C3CR(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C3CR(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C4CR(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C4CR(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C4CR(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C4CR(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C4CR(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

  • Copying the pixels of a selected channel to a single-channel image:

    HmppResult HMPPI_Copy_8u_C3C1R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C3C1R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C3C1R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C3C1R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C3C1R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C4C1R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C4C1R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C4C1R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C4C1R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C4C1R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

  • Copying the pixels of a single-channel image to a multi-channel image:

    HmppResult HMPPI_Copy_8u_C1C3R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C1C3R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C1C3R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C1C3R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C1C3R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C1C4R(const uint8_t *src, int32_t srcStep, uint8_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C1C4R(const uint16_t *src, int32_t srcStep, uint16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C1C4R(const int16_t *src, int32_t srcStep, int16_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C1C4R(const int32_t *src, int32_t srcStep, int32_t *dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C1C4R(const float *src, int32_t srcStep, float *dst, int32_t dstStep, HmppiSize roiSize);

  • Splitting a multi-channel image into separate images:

    HmppResult HMPPI_Copy_8u_C3P3R(const uint8_t *src, int32_t srcStep, uint8_t * const dst[3], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C3P3R(const uint16_t *src, int32_t srcStep, uint16_t * const dst[3], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C3P3R(const int16_t *src, int32_t srcStep, int16_t * const dst[3], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C3P3R(const int32_t *src, int32_t srcStep, int32_t * const dst[3], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C3P3R(const float *src, int32_t srcStep, float * const dst[3], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_C4P4R(const uint8_t *src, int32_t srcStep, uint8_t * const dst[4], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_C4P4R(const uint16_t *src, int32_t srcStep, uint16_t * const dst[4], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_C4P4R(const int16_t *src, int32_t srcStep, int16_t * const dst[4], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_C4P4R(const int32_t *src, int32_t srcStep, int32_t * const dst[4], int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_C4P4R(const float *src, int32_t srcStep, float * const dst[4], int32_t dstStep, HmppiSize roiSize);

  • Composing a multi-channel image from separate images:

    HmppResult HMPPI_Copy_8u_P3C3R(const uint8_t * const src[3], int32_t srcStep, uint8_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_P3C3R(const uint16_t * const src[3], int32_t srcStep, uint16_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_P3C3R(const int16_t * const src[3], int32_t srcStep, int16_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_P3C3R(const int32_t * const src[3], int32_t srcStep, int32_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_P3C3R(const float * const src[3], int32_t srcStep, float * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_8u_P4C4R(const uint8_t * const src[4], int32_t srcStep, uint8_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16u_P4C4R(const uint16_t * const src[4], int32_t srcStep, uint16_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_16s_P4C4R(const int16_t * const src[4], int32_t srcStep, int16_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32s_P4C4R(const int32_t * const src[4], int32_t srcStep, int32_t * const dst, int32_t dstStep, HmppiSize roiSize);

    HmppResult HMPPI_Copy_32f_P4C4R(const float * const src[4], int32_t srcStep, float * const dst, int32_t dstStep, HmppiSize roiSize);

Parameters

Parameter

Description

Value Range

Input/Output

src

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

dst

Pointer to the destination image ROI

The value cannot be NULL.

Output

dstStep

Distance between starts of consecutive lines in the destination image, in bytes

The value must be zero or a positive integer.

Input

roiSize

Size of the ROI of the source and destination images, in pixels

roiSize.width ∈ (0, INT_MAX], roiSize.height ∈ (0, INT_MAX]

Input/Output

mask

Pointer to the mask image buffer

The value cannot be NULL.

Input

maskStep

Distance between the starting points of consecutive lines in the mask image buffer, in bytes

The value must be zero or a positive integer.

Input

Return Value

  • Success: HMPP_STS_NO_ERR
  • Failure: An error code is returned.

Error Codes

Error Code

Description

HMPP_STS_NULL_PTR_ERR

The value of src or dst is NULL.

HMPP_STS_SIZE_ERR

The value of roiSize is 0 or negative.

HMPP_STS_STEP_ERR

The value of srcStep or dstStep is zero or negative.

HMPP_STS_NOT_EVEN_STEP_ERR

The value of srcStep or dstStep cannot be exactly divided by the byte length of the data type to which src or dst belongs.

HMPP_STS_ROI_ERR

roiSize.width > Step

Example

#define SRC_BUFFER_SIZE_T 90
#define DST_BUFFER_SIZE_T 90

int CopyExample()
{
    HmppiSize roi = { 4, 5 };
    const uint8_t src[SRC_BUFFER_SIZE_T] = {
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66, 55, 44, 33, 
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66, 55, 44, 33, 
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66, 55, 44, 33, 
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66, 55, 44, 33, 
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66, 55, 44, 33, 
        11, 22, 33, 44, 55, 66, 77, 88, 22, 88, 77, 66, 55, 44, 33
    };
    uint8_t dst[DST_BUFFER_SIZE_T] = {0};
    int32_t srcStep = 15 * sizeof(uint8_t);
    int32_t dstStep = 18 * sizeof(uint8_t);
    HmppResult result = HMPPI_Copy_8u_C3AC4R(src, srcStep, dst, dstStep, roi);

    printf("result = %d \ndst = ", result);
    if (result != HMPP_STS_NO_ERR) {
        printf("result error: %d\n", result);
    }
    int32_t dstWidth = dstStep / sizeof(uint8_t);
    for (int32_t i = 0; i < DST_BUFFER_SIZE_T; i++) {
        if( i % dstWidth == 0 ){
            printf("\n");
        }
        printf("%3d ",dst[i]);       
    }
    printf("\n");
    return 0;
}

Output:

result = 0
dst = 
 11  22  33   0  44  55  66   0  77  88  22   0  88  77  66   0   0   0 
 11  22  33   0  44  55  66   0  77  88  22   0  88  77  66   0   0   0 
 11  22  33   0  44  55  66   0  77  88  22   0  88  77  66   0   0   0 
 11  22  33   0  44  55  66   0  77  88  22   0  88  77  66   0   0   0 
 11  22  33   0  44  55  66   0  77  88  22   0  88  77  66   0   0   0 
  0   0   0   0   0   0   0   0   0   0