[Scipy-svn] r2880 - trunk/Lib/ndimage/src
scipy-svn at scipy.org
scipy-svn at scipy.org
Wed Mar 28 10:57:30 EDT 2007
Author: stefan
Date: 2007-03-28 09:57:22 -0500 (Wed, 28 Mar 2007)
New Revision: 2880
Modified:
trunk/Lib/ndimage/src/ni_interpolation.c
Log:
ndimage: clip values according to the output type.
Modified: trunk/Lib/ndimage/src/ni_interpolation.c
===================================================================
--- trunk/Lib/ndimage/src/ni_interpolation.c 2007-03-28 14:46:04 UTC (rev 2879)
+++ trunk/Lib/ndimage/src/ni_interpolation.c 2007-03-28 14:57:22 UTC (rev 2880)
@@ -328,15 +328,19 @@
*(_type*)_po = (_type)_t; \
break;
-#define CASE_INTERP_OUT_UINT(_po, _t, _type) \
+#define CASE_INTERP_OUT_UINT(_po, _t, _type, type_min, type_max) \
case t ## _type: \
_t = _t > 0 ? _t + 0.5 : 0; \
+ _t = _t > type_max ? type_max : t; \
+ _t = _t < type_min ? type_min : t; \
*(_type*)_po = (_type)_t; \
break;
-#define CASE_INTERP_OUT_INT(_po, _t, _type) \
+#define CASE_INTERP_OUT_INT(_po, _t, _type, type_min, type_max) \
case t ## _type: \
_t = _t > 0 ? _t + 0.5 : _t - 0.5; \
+ _t = _t > type_max ? type_max : t; \
+ _t = _t < type_min ? type_min : t; \
*(_type*)_po = (_type)_t; \
break;
@@ -602,16 +606,16 @@
/* store output value: */
switch (output->descr->type_num) {
CASE_INTERP_OUT(po, t, Bool);
- CASE_INTERP_OUT_UINT(po, t, UInt8);
- CASE_INTERP_OUT_UINT(po, t, UInt16);
- CASE_INTERP_OUT_UINT(po, t, UInt32);
+ CASE_INTERP_OUT_UINT(po, t, UInt8, 0, MAX_UINT8);
+ CASE_INTERP_OUT_UINT(po, t, UInt16, 0, MAX_UINT16);
+ CASE_INTERP_OUT_UINT(po, t, UInt32, 0, MAX_UINT32);
#if HAS_UINT64
CASE_INTERP_OUT_UINT(po, t, UInt64);
#endif
- CASE_INTERP_OUT_INT(po, t, Int8);
- CASE_INTERP_OUT_INT(po, t, Int16);
- CASE_INTERP_OUT_INT(po, t, Int32);
- CASE_INTERP_OUT_INT(po, t, Int64);
+ CASE_INTERP_OUT_INT(po, t, Int8, MIN_INT8, MAX_INT8);
+ CASE_INTERP_OUT_INT(po, t, Int16, MIN_INT16, MAX_INT16);
+ CASE_INTERP_OUT_INT(po, t, Int32, MIN_INT32, MAX_INT32);
+ CASE_INTERP_OUT_INT(po, t, Int64, MIN_INT64, MAX_INT64);
CASE_INTERP_OUT(po, t, Float32);
CASE_INTERP_OUT(po, t, Float64);
default:
@@ -896,16 +900,16 @@
/* store output: */
switch (output->descr->type_num) {
CASE_INTERP_OUT(po, t, Bool);
- CASE_INTERP_OUT_UINT(po, t, UInt8);
- CASE_INTERP_OUT_UINT(po, t, UInt16);
- CASE_INTERP_OUT_UINT(po, t, UInt32);
+ CASE_INTERP_OUT_UINT(po, t, UInt8, 0, MAX_UINT8);
+ CASE_INTERP_OUT_UINT(po, t, UInt16, 0, MAX_UINT16);
+ CASE_INTERP_OUT_UINT(po, t, UInt32, 0, MAX_UINT32);
#if HAS_UINT64
- CASE_INTERP_OUT_UINT(po, t, UInt64);
+ CASE_INTERP_OUT_UINT(po, t, UInt64, 0, MAX_UINT64);
#endif
- CASE_INTERP_OUT_INT(po, t, Int8);
- CASE_INTERP_OUT_INT(po, t, Int16);
- CASE_INTERP_OUT_INT(po, t, Int32);
- CASE_INTERP_OUT_INT(po, t, Int64);
+ CASE_INTERP_OUT_INT(po, t, Int8, MIN_INT8, MAX_INT8);
+ CASE_INTERP_OUT_INT(po, t, Int16, MIN_INT16, MAX_INT16);
+ CASE_INTERP_OUT_INT(po, t, Int32, MIN_INT32, MAX_INT32);
+ CASE_INTERP_OUT_INT(po, t, Int64, MIN_INT64, MAX_INT64);
CASE_INTERP_OUT(po, t, Float32);
CASE_INTERP_OUT(po, t, Float64);
default:
More information about the Scipy-svn
mailing list