Index: trunk/psLib/src/imageops/psImagePixelExtract.c
===================================================================
--- trunk/psLib/src/imageops/psImagePixelExtract.c	(revision 4544)
+++ trunk/psLib/src/imageops/psImagePixelExtract.c	(revision 5174)
@@ -8,6 +8,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-07-12 19:33:49 $
+ *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-09-29 01:15:38 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -22,4 +22,179 @@
 
 #include "psErrorText.h"
+
+
+#define FUNC_MACRO_VECTOR_STORE_ROW(TYPE) \
+static psVector *vectorStoreRow##TYPE(psVector *vec, const psImage *in, int row) \
+{ \
+    \
+    for (int i = 0; i < in->numCols; i++) \
+    { \
+        vec->data.TYPE[i] = in->data.TYPE[i][row]; \
+    } \
+    return vec; \
+} \
+
+FUNC_MACRO_VECTOR_STORE_ROW(S8)
+FUNC_MACRO_VECTOR_STORE_ROW(S16)
+FUNC_MACRO_VECTOR_STORE_ROW(S32)
+FUNC_MACRO_VECTOR_STORE_ROW(S64)
+FUNC_MACRO_VECTOR_STORE_ROW(U8)
+FUNC_MACRO_VECTOR_STORE_ROW(U16)
+FUNC_MACRO_VECTOR_STORE_ROW(U32)
+FUNC_MACRO_VECTOR_STORE_ROW(U64)
+FUNC_MACRO_VECTOR_STORE_ROW(F32)
+FUNC_MACRO_VECTOR_STORE_ROW(F64)
+FUNC_MACRO_VECTOR_STORE_ROW(C32)
+FUNC_MACRO_VECTOR_STORE_ROW(C64)
+
+psVector *psImageRow(psVector *out,
+                     const psImage *input,
+                     psU32 row)
+{
+    if (input == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psImage_IMAGE_NULL);
+        return NULL;
+    }
+    if (row >= input->numRows) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, true,
+                "Specified row number is out of range for specified image.\n");
+        return NULL;
+    }
+    psVectorRecycle(out, input->numCols, input->type.type);
+
+    switch (input->type.type) {
+    case PS_TYPE_S8:
+        out = vectorStoreRowS8(out, input, row);
+        break;
+    case PS_TYPE_S16:
+        out = vectorStoreRowS16(out, input, row);
+        break;
+    case PS_TYPE_S32:
+        out = vectorStoreRowS32(out, input, row);
+        break;
+    case PS_TYPE_S64:
+        out = vectorStoreRowS64(out, input, row);
+        break;
+    case PS_TYPE_U8:
+        out = vectorStoreRowU8(out, input, row);
+        break;
+    case PS_TYPE_U16:
+        out = vectorStoreRowU16(out, input, row);
+        break;
+    case PS_TYPE_U32:
+        out = vectorStoreRowU32(out, input, row);
+        break;
+    case PS_TYPE_U64:
+        out = vectorStoreRowU64(out, input, row);
+        break;
+    case PS_TYPE_F32:
+        out = vectorStoreRowF32(out, input, row);
+        break;
+    case PS_TYPE_F64:
+        out = vectorStoreRowF64(out, input, row);
+        break;
+    case PS_TYPE_C32:
+        out = vectorStoreRowC32(out, input, row);
+        break;
+    case PS_TYPE_C64:
+        out = vectorStoreRowC64(out, input, row);
+        break;
+    default:
+        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
+                "Specified psImage has invalid type for this function.\n");
+        return NULL;
+    }
+
+    return out;
+}
+
+
+#define FUNC_MACRO_VECTOR_STORE_COL(TYPE) \
+static psVector *vectorStoreCol##TYPE(psVector *vec, const psImage *in, int col) \
+{ \
+    \
+    for (int i = 0; i < in->numRows; i++) \
+    { \
+        vec->data.TYPE[i] = in->data.TYPE[col][i]; \
+    } \
+    return vec; \
+} \
+
+FUNC_MACRO_VECTOR_STORE_COL(S8)
+FUNC_MACRO_VECTOR_STORE_COL(S16)
+FUNC_MACRO_VECTOR_STORE_COL(S32)
+FUNC_MACRO_VECTOR_STORE_COL(S64)
+FUNC_MACRO_VECTOR_STORE_COL(U8)
+FUNC_MACRO_VECTOR_STORE_COL(U16)
+FUNC_MACRO_VECTOR_STORE_COL(U32)
+FUNC_MACRO_VECTOR_STORE_COL(U64)
+FUNC_MACRO_VECTOR_STORE_COL(F32)
+FUNC_MACRO_VECTOR_STORE_COL(F64)
+FUNC_MACRO_VECTOR_STORE_COL(C32)
+FUNC_MACRO_VECTOR_STORE_COL(C64)
+
+
+psVector *psImageCol(psVector *out,
+                     const psImage *input,
+                     psU32 column)
+{
+    if (input == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, true, PS_ERRORTEXT_psImage_IMAGE_NULL);
+        return NULL;
+    }
+    if (column >= input->numRows) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, true,
+                "Specified column number is out of range for specified image.\n");
+        return NULL;
+    }
+    psVectorRecycle(out, input->numCols, input->type.type);
+
+    switch (input->type.type) {
+    case PS_TYPE_S8:
+        out = vectorStoreColS8(out, input, column);
+        break;
+    case PS_TYPE_S16:
+        out = vectorStoreColS16(out, input, column);
+        break;
+    case PS_TYPE_S32:
+        out = vectorStoreColS32(out, input, column);
+        break;
+    case PS_TYPE_S64:
+        out = vectorStoreColS64(out, input, column);
+        break;
+    case PS_TYPE_U8:
+        out = vectorStoreColU8(out, input, column);
+        break;
+    case PS_TYPE_U16:
+        out = vectorStoreColU16(out, input, column);
+        break;
+    case PS_TYPE_U32:
+        out = vectorStoreColU32(out, input, column);
+        break;
+    case PS_TYPE_U64:
+        out = vectorStoreColU64(out, input, column);
+        break;
+    case PS_TYPE_F32:
+        out = vectorStoreColF32(out, input, column);
+        break;
+    case PS_TYPE_F64:
+        out = vectorStoreColF64(out, input, column);
+        break;
+    case PS_TYPE_C32:
+        out = vectorStoreColC32(out, input, column);
+        break;
+    case PS_TYPE_C64:
+        out = vectorStoreColC64(out, input, column);
+        break;
+    default:
+        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
+                "Specified psImage has invalid type for this function.\n");
+        return NULL;
+    }
+
+    return out;
+
+}
+
 
 psVector* psImageSlice(psVector* out,
