Index: trunk/psLib/src/imageops/psImageConvolve.c
===================================================================
--- trunk/psLib/src/imageops/psImageConvolve.c	(revision 14638)
+++ trunk/psLib/src/imageops/psImageConvolve.c	(revision 14704)
@@ -7,6 +7,6 @@
 /// @author Eugene Magnier, IfA
 ///
-/// @version $Revision: 1.55 $ $Name: not supported by cvs2svn $
-/// @date $Date: 2007-08-23 21:52:29 $
+/// @version $Revision: 1.56 $ $Name: not supported by cvs2svn $
+/// @date $Date: 2007-08-30 20:15:23 $
 ///
 /// Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -259,9 +259,13 @@
         for (int row = 0; row < numRows; row++) { \
             ps##TYPE *outRow = out->data.TYPE[row]; \
+            int kRowMin = PS_MAX(yMin, row + 1 - numRows); \
+            int kRowMax = PS_MIN(yMax, row); \
             for (int col = 0; col < numCols; col++) { \
+                int kColMin = PS_MAX(xMin, col + 1 - numCols); \
+                int kColMax = PS_MIN(xMax, col); \
                 ps##TYPE pixel = 0.0; \
-                for (int kRow = PS_MAX(yMin, -row); kRow <= PS_MIN(yMax, numRows - row - 1); kRow++) { \
-                    for (int kCol = PS_MAX(xMin, -col); kCol <= PS_MIN(xMax, numCols - col - 1); kCol++) { \
-                        pixel += kernelData[kRow][kCol] * inData[row + kRow][col + kCol]; \
+                for (int kRow = kRowMin; kRow <= kRowMax; kRow++) { \
+                    for (int kCol = kColMin; kCol <= kColMax; kCol++) { \
+                        pixel += kernelData[kRow][kCol] * inData[row - kRow][col - kCol]; \
                     } \
                 } \
@@ -286,7 +290,7 @@
                     continue; \
                 } \
-                for (int y = PS_MAX(- ky, 0); y < PS_MIN(numRows, numRows - ky); y++) { \
-                    for (int x = PS_MAX(- kx, 0); x < PS_MIN(numCols, numCols - kx); x++) { \
-                        out->data.TYPE[y][x] += kValue * inData[y + ky][x + kx]; \
+                for (int y = PS_MAX(ky, 0); y < PS_MIN(numRows, numRows + ky); y++) { \
+                    for (int x = PS_MAX(kx, 0); x < PS_MIN(numCols, numCols + kx); x++) { \
+                        out->data.TYPE[y][x] += kValue * inData[y - ky][x - kx]; \
                     } \
                 } \
