MCPcopy Create free account
hub / github.com/creatale/node-dv / copyMakeBorder_8u

Function copyMakeBorder_8u

deps/opencv/modules/imgproc/src/utils.cpp:81–159  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

79{
80
81static void copyMakeBorder_8u( const uchar* src, size_t srcstep, Size srcroi,
82 uchar* dst, size_t dststep, Size dstroi,
83 int top, int left, int cn, int borderType )
84{
85 const int isz = (int)sizeof(int);
86 int i, j, k, elemSize = 1;
87 bool intMode = false;
88
89 if( (cn | srcstep | dststep | (size_t)src | (size_t)dst) % isz == 0 )
90 {
91 cn /= isz;
92 elemSize = isz;
93 intMode = true;
94 }
95
96 AutoBuffer<int> _tab((dstroi.width - srcroi.width)*cn);
97 int* tab = _tab;
98 int right = dstroi.width - srcroi.width - left;
99 int bottom = dstroi.height - srcroi.height - top;
100
101 for( i = 0; i < left; i++ )
102 {
103 j = borderInterpolate(i - left, srcroi.width, borderType)*cn;
104 for( k = 0; k < cn; k++ )
105 tab[i*cn + k] = j + k;
106 }
107
108 for( i = 0; i < right; i++ )
109 {
110 j = borderInterpolate(srcroi.width + i, srcroi.width, borderType)*cn;
111 for( k = 0; k < cn; k++ )
112 tab[(i+left)*cn + k] = j + k;
113 }
114
115 srcroi.width *= cn;
116 dstroi.width *= cn;
117 left *= cn;
118 right *= cn;
119
120 uchar* dstInner = dst + dststep*top + left*elemSize;
121
122 for( i = 0; i < srcroi.height; i++, dstInner += dststep, src += srcstep )
123 {
124 if( dstInner != src )
125 memcpy(dstInner, src, srcroi.width*elemSize);
126
127 if( intMode )
128 {
129 const int* isrc = (int*)src;
130 int* idstInner = (int*)dstInner;
131 for( j = 0; j < left; j++ )
132 idstInner[j - left] = isrc[tab[j]];
133 for( j = 0; j < right; j++ )
134 idstInner[j + srcroi.width] = isrc[tab[j + left]];
135 }
136 else
137 {
138 for( j = 0; j < left; j++ )

Callers 1

copyMakeBorderMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected