Index: trunk/psLib/src/imageops/psImageStats.c
===================================================================
--- trunk/psLib/src/imageops/psImageStats.c	(revision 1251)
+++ trunk/psLib/src/imageops/psImageStats.c	(revision 1260)
@@ -400,10 +400,20 @@
     default: \
         psError(__func__,"Unsupported interpolation mode (#%d)",mode); \
-        return unexposedValue; \
     } \
     break
 
     switch (input->type.type) {
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(U8);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(U16);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(U32);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(U64);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(S8);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(S16);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(S32);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(S64);
         PSIMAGE_PIXEL_INTERPOLATE_CASE(F32);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(F64);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(C32);
+        PSIMAGE_PIXEL_INTERPOLATE_CASE(C64);
     default:
         psError(__func__,"Unsupported image datatype (%d)",input->type.type);
@@ -434,4 +444,25 @@
 }
 
+#define PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(TYPE) \
+inline psC64 p_psImagePixelInterpolateFLAT_##TYPE(const psImage *input, \
+        float x, \
+        float y, \
+        psC64 unexposedValue) \
+{ \
+    int intX = (int) round((psF64)(x) - 0.5); \
+    int intY = (int) round((psF64)(y) - 0.5); \
+    int lastX = input->numCols - 1; \
+    int lastY = input->numRows - 1; \
+    \
+    if ((intX < 0) || \
+            (intX > lastX) || \
+            (intY < 0) || \
+            (intY > lastY)) { \
+        return unexposedValue; \
+    } \
+    \
+    return input->data.TYPE[intY][intX]; \
+}
+
 PSIMAGE_PIXEL_INTERPOLATE_FLAT(U8)
 PSIMAGE_PIXEL_INTERPOLATE_FLAT(U16)
@@ -444,4 +475,6 @@
 PSIMAGE_PIXEL_INTERPOLATE_FLAT(F32)
 PSIMAGE_PIXEL_INTERPOLATE_FLAT(F64)
+PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(C32)
+PSIMAGE_PIXEL_INTERPOLATE_FLAT_COMPLEX(C64)
 
 #define PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(TYPE) \
@@ -501,4 +534,60 @@
 }
 
+#define PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(TYPE) \
+inline psC64 p_psImagePixelInterpolateBILINEAR_##TYPE(const psImage *input, \
+        float x, \
+        float y, \
+        psC64 unexposedValue) \
+{ \
+    double floorX = floor((psF64)(x) - 0.5); \
+    double floorY = floor((psF64)(y) - 0.5); \
+    double fracX = x - 0.5 - floorX; \
+    double fracY = y - 0.5 - floorY; \
+    int intFloorX = (int) floorX; \
+    int intFloorY = (int) floorY; \
+    int lastX = input->numCols - 1; \
+    int lastY = input->numRows - 1; \
+    double rx = 0.0; \
+    psC64 pixel = 0.0; \
+    ps##TYPE* currentRow; \
+    ps##TYPE* nextRow; \
+    \
+    if ((intFloorX < 0) || \
+            (intFloorX > lastX) || \
+            (intFloorY < 0) || \
+            (intFloorY > lastY)) { \
+        return unexposedValue; \
+    } \
+    \
+    currentRow = input->data.TYPE[intFloorY]; \
+    if (intFloorY == lastY) { \
+        pixel = currentRow[intFloorX]; \
+        if (intFloorX < lastX) { \
+            pixel+= fracY * (currentRow[intFloorX+1] - \
+                             currentRow[intFloorX]); \
+        } \
+        return(pixel); \
+    } \
+    nextRow = input->data.TYPE[intFloorY+1]; \
+    if (intFloorX == lastX) { \
+        pixel = currentRow[intFloorX]; \
+        if (intFloorY < lastY) { \
+            pixel+= fracX * (nextRow[intFloorX] - \
+                             currentRow[intFloorX]); \
+        } \
+        return(pixel); \
+    } \
+    \
+    rx = currentRow[intFloorX] + \
+         fracX * (currentRow[intFloorX+1] - \
+                  currentRow[intFloorX]); \
+    \
+    pixel = rx + fracY * ((psF64)nextRow[intFloorX] + \
+                          fracX * (nextRow[intFloorX+1] - \
+                                   nextRow[intFloorX]) - rx); \
+    \
+    return(pixel); \
+}
+
 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U8)
 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(U16)
@@ -511,3 +600,5 @@
 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(F32)
 PSIMAGE_PIXEL_INTERPOLATE_BILINEAR(F64)
-
+PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(C32)
+PSIMAGE_PIXEL_INTERPOLATE_BILINEAR_COMPLEX(C64)
+
Index: trunk/psLib/src/imageops/psImageStats.h
===================================================================
--- trunk/psLib/src/imageops/psImageStats.h	(revision 1251)
+++ trunk/psLib/src/imageops/psImageStats.h	(revision 1260)
@@ -10,6 +10,6 @@
  *  @author George Gusciora, MHPCC
  *
- *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-07-21 23:39:48 $
+ *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-07-22 20:02:57 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -76,5 +76,19 @@
         float y, \
         psF64 unexposedValue \
-                                                     ); \
+                                                     );
+
+#define p_psImagePixelInterpolateComplexFcns(TYPE) \
+inline psC64 p_psImagePixelInterpolateFLAT_##TYPE( \
+        const psImage *input, \
+        float x, \
+        float y, \
+        psC64 unexposedValue \
+                                                 ); \
+inline psC64 p_psImagePixelInterpolateBILINEAR_##TYPE( \
+        const psImage *input, \
+        float x, \
+        float y, \
+        psC64 unexposedValue \
+                                                     );
 
 p_psImagePixelInterpolateFcns(U8)
@@ -88,4 +102,6 @@
 p_psImagePixelInterpolateFcns(F32)
 p_psImagePixelInterpolateFcns(F64)
+p_psImagePixelInterpolateComplexFcns(C32)
+p_psImagePixelInterpolateComplexFcns(C64)
 
 #endif
