@@ -105,6 +105,19 @@ _get_transform_mesh(PyObject *py_affine, npy_intp *dims)
105
105
}
106
106
107
107
108
+ template <class T >
109
+ static void
110
+ resample (PyArrayObject* input, PyArrayObject* output, resample_params_t params)
111
+ {
112
+ Py_BEGIN_ALLOW_THREADS
113
+ resample (
114
+ (T*)PyArray_DATA (input), PyArray_DIM (input, 1 ), PyArray_DIM (input, 0 ),
115
+ (T*)PyArray_DATA (output), PyArray_DIM (output, 1 ), PyArray_DIM (output, 0 ),
116
+ params);
117
+ Py_END_ALLOW_THREADS
118
+ }
119
+
120
+
108
121
static PyObject *
109
122
image_resample (PyObject *self, PyObject* args, PyObject *kwargs)
110
123
{
@@ -216,56 +229,20 @@ image_resample(PyObject *self, PyObject* args, PyObject *kwargs)
216
229
}
217
230
218
231
if (PyArray_DIM (input_array, 2 ) == 4 ) {
219
- switch (PyArray_TYPE (input_array)) {
220
- case NPY_BYTE:
232
+ switch (PyArray_TYPE (input_array)) {
221
233
case NPY_UINT8:
222
- Py_BEGIN_ALLOW_THREADS
223
- resample (
224
- (agg::rgba8 *)PyArray_DATA (input_array),
225
- PyArray_DIM (input_array, 1 ),
226
- PyArray_DIM (input_array, 0 ),
227
- (agg::rgba8 *)PyArray_DATA (output_array),
228
- PyArray_DIM (output_array, 1 ),
229
- PyArray_DIM (output_array, 0 ),
230
- params);
231
- Py_END_ALLOW_THREADS
234
+ case NPY_INT8:
235
+ resample<agg::rgba8>(input_array, output_array, params);
232
236
break ;
233
237
case NPY_UINT16:
234
238
case NPY_INT16:
235
- Py_BEGIN_ALLOW_THREADS
236
- resample (
237
- (agg::rgba16 *)PyArray_DATA (input_array),
238
- PyArray_DIM (input_array, 1 ),
239
- PyArray_DIM (input_array, 0 ),
240
- (agg::rgba16 *)PyArray_DATA (output_array),
241
- PyArray_DIM (output_array, 1 ),
242
- PyArray_DIM (output_array, 0 ),
243
- params);
244
- Py_END_ALLOW_THREADS
239
+ resample<agg::rgba16>(input_array, output_array, params);
245
240
break ;
246
241
case NPY_FLOAT32:
247
- Py_BEGIN_ALLOW_THREADS
248
- resample (
249
- (agg::rgba32 *)PyArray_DATA (input_array),
250
- PyArray_DIM (input_array, 1 ),
251
- PyArray_DIM (input_array, 0 ),
252
- (agg::rgba32 *)PyArray_DATA (output_array),
253
- PyArray_DIM (output_array, 1 ),
254
- PyArray_DIM (output_array, 0 ),
255
- params);
256
- Py_END_ALLOW_THREADS
242
+ resample<agg::rgba32>(input_array, output_array, params);
257
243
break ;
258
244
case NPY_FLOAT64:
259
- Py_BEGIN_ALLOW_THREADS
260
- resample (
261
- (agg::rgba64 *)PyArray_DATA (input_array),
262
- PyArray_DIM (input_array, 1 ),
263
- PyArray_DIM (input_array, 0 ),
264
- (agg::rgba64 *)PyArray_DATA (output_array),
265
- PyArray_DIM (output_array, 1 ),
266
- PyArray_DIM (output_array, 0 ),
267
- params);
268
- Py_END_ALLOW_THREADS
245
+ resample<agg::rgba64>(input_array, output_array, params);
269
246
break ;
270
247
default :
271
248
PyErr_SetString (
@@ -284,54 +261,18 @@ image_resample(PyObject *self, PyObject* args, PyObject *kwargs)
284
261
} else { // NDIM == 2
285
262
switch (PyArray_TYPE (input_array)) {
286
263
case NPY_DOUBLE:
287
- Py_BEGIN_ALLOW_THREADS
288
- resample (
289
- (double *)PyArray_DATA (input_array),
290
- PyArray_DIM (input_array, 1 ),
291
- PyArray_DIM (input_array, 0 ),
292
- (double *)PyArray_DATA (output_array),
293
- PyArray_DIM (output_array, 1 ),
294
- PyArray_DIM (output_array, 0 ),
295
- params);
296
- Py_END_ALLOW_THREADS
264
+ resample<double >(input_array, output_array, params);
297
265
break ;
298
266
case NPY_FLOAT:
299
- Py_BEGIN_ALLOW_THREADS
300
- resample (
301
- (float *)PyArray_DATA (input_array),
302
- PyArray_DIM (input_array, 1 ),
303
- PyArray_DIM (input_array, 0 ),
304
- (float *)PyArray_DATA (output_array),
305
- PyArray_DIM (output_array, 1 ),
306
- PyArray_DIM (output_array, 0 ),
307
- params);
308
- Py_END_ALLOW_THREADS
267
+ resample<float >(input_array, output_array, params);
309
268
break ;
310
269
case NPY_UINT8:
311
- case NPY_BYTE:
312
- Py_BEGIN_ALLOW_THREADS
313
- resample (
314
- (unsigned char *)PyArray_DATA (input_array),
315
- PyArray_DIM (input_array, 1 ),
316
- PyArray_DIM (input_array, 0 ),
317
- (unsigned char *)PyArray_DATA (output_array),
318
- PyArray_DIM (output_array, 1 ),
319
- PyArray_DIM (output_array, 0 ),
320
- params);
321
- Py_END_ALLOW_THREADS
270
+ case NPY_INT8:
271
+ resample<unsigned char >(input_array, output_array, params);
322
272
break ;
323
273
case NPY_UINT16:
324
274
case NPY_INT16:
325
- Py_BEGIN_ALLOW_THREADS
326
- resample (
327
- (unsigned short *)PyArray_DATA (input_array),
328
- PyArray_DIM (input_array, 1 ),
329
- PyArray_DIM (input_array, 0 ),
330
- (unsigned short *)PyArray_DATA (output_array),
331
- PyArray_DIM (output_array, 1 ),
332
- PyArray_DIM (output_array, 0 ),
333
- params);
334
- Py_END_ALLOW_THREADS
275
+ resample<unsigned short >(input_array, output_array, params);
335
276
break ;
336
277
default :
337
278
PyErr_SetString (PyExc_ValueError, " Unsupported dtype" );
0 commit comments