Changeset 3977 for trunk/psLib/src/imageops
- Timestamp:
- May 18, 2005, 7:18:20 PM (21 years ago)
- Location:
- trunk/psLib/src/imageops
- Files:
-
- 4 edited
-
psImageConvolve.c (modified) (2 diffs)
-
psImageGeomManip.c (modified) (2 diffs)
-
psImageStructManip.c (modified) (2 diffs)
-
psImageStructManip.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/imageops/psImageConvolve.c
r3968 r3977 5 5 * @author Robert DeSonia, MHPCC 6 6 * 7 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $8 * @date $Date: 2005-05-19 0 2:08:21$7 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 8 * @date $Date: 2005-05-19 05:18:20 $ 9 9 * 10 10 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 454 454 455 455 // subset out the padded area now. 456 psImage* complexOutSansPad = psImageSubset(complexOut,(psRegion) { 457 FOURIER_PADDING,FOURIER_PADDING, 458 FOURIER_PADDING+numCols,FOURIER_PADDING+numRows 459 } 460 ); 456 psImage* complexOutSansPad = psImageSubset(complexOut, 457 psRegionSet(FOURIER_PADDING, FOURIER_PADDING+numCols,FOURIER_PADDING,FOURIER_PADDING+numRows)); 461 458 462 459 out = psImageRecycle(out,numCols,numRows,PS_TYPE_F32); -
trunk/psLib/src/imageops/psImageGeomManip.c
r3968 r3977 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1. 1$ $Name: not supported by cvs2svn $13 * @date $Date: 2005-05-19 0 2:08:21$12 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-05-19 05:18:20 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 25 25 #include "psError.h" 26 26 #include "psImage.h" 27 #include "psImageStructManip.h" 27 28 #include "psStats.h" 28 29 #include "psMemory.h" -
trunk/psLib/src/imageops/psImageStructManip.c
r3968 r3977 8 8 * @author Robert DeSonia, MHPCC 9 9 * 10 * @version $Revision: 1. 1$ $Name: not supported by cvs2svn $11 * @date $Date: 2005-05-19 0 2:08:21$10 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2005-05-19 05:18:20 $ 12 12 * 13 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 136 136 } 137 137 138 psImage* psImageSubsection(psImage* image, 139 const char* section) 138 psImage* psImageCopy(psImage* output, 139 const psImage* input, 140 psElemType type) 140 141 { 141 ps S32 col0;142 psS32 col1;143 psS32 row0;144 psS32 row1;145 146 // section should be of the form '[col0:col1,row0:row1]' 147 if ( section== NULL) {142 psElemType inDatatype; 143 psS32 elementSize; 144 psS32 elements; 145 psS32 numRows; 146 psS32 numCols; 147 148 if (input == NULL || input->data.V == NULL) { 148 149 psError(PS_ERR_BAD_PARAMETER_NULL, true, 149 PS_ERRORTEXT_psImage_SUBSECTION_NULL); 150 return NULL; 151 } 152 153 if (sscanf(section,"[%d:%d,%d:%d]",&col0,&col1,&row0,&row1) < 4) { 150 PS_ERRORTEXT_psImage_IMAGE_NULL); 151 psFree(output); 152 return NULL; 153 } 154 155 if (input == output) { 154 156 psError(PS_ERR_BAD_PARAMETER_NULL, true, 155 PS_ERRORTEXT_psImage_SUBSECTION_INVALID, 156 section); 157 return NULL; 158 } 159 160 if (col0 > col1 || row0 > row1) { 161 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 162 PS_ERRORTEXT_psImage_SUBSET_RANGE_MALFORMED, 163 col0,col1,row0,row1); 164 return NULL; 165 } 166 167 return imageSubset(NULL,image,col0,row0,col1+1,row1+1); 157 PS_ERRORTEXT_psImage_INPLACE_NOTSUPPORTED); 158 psFree(output); 159 return NULL; 160 } 161 162 if (input->type.dimen != PS_DIMEN_IMAGE) { 163 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 164 PS_ERRORTEXT_psImage_NOT_AN_IMAGE); 165 psFree(output); 166 return NULL; 167 } 168 169 inDatatype = input->type.type; 170 numRows = input->numRows; 171 numCols = input->numCols; 172 elements = numRows * numCols; 173 elementSize = PSELEMTYPE_SIZEOF(inDatatype); 174 175 output = psImageRecycle(output, numCols, numRows, type); 176 177 // cover the trival case of copy of the same 178 // datatype. 179 if (type == inDatatype) { 180 for (psS32 row=0;row<numRows;row++) { 181 memcpy(output->data.V[row], input->data.V[row], elementSize * numCols); 182 } 183 return output; 184 } 185 186 #define PSIMAGE_ELEMENT_COPY(IN,INTYPE,OUT,OUTTYPE,ELEMENTS) { \ 187 ps##INTYPE *in; \ 188 ps##OUTTYPE *out; \ 189 for(psS32 row=0;row<numRows;row++) { \ 190 in = IN->data.INTYPE[row]; \ 191 out = OUT->data.OUTTYPE[row]; \ 192 for (psS32 col=0;col<numCols;col++) { \ 193 *(out++) = *(in++); \ 194 } \ 195 } \ 196 } 197 198 #define PSIMAGE_COPY_CASE(OUT,OUTTYPE) { \ 199 switch (inDatatype) { \ 200 case PS_TYPE_S8: \ 201 PSIMAGE_ELEMENT_COPY(input,S8,OUT,OUTTYPE,elements); \ 202 break; \ 203 case PS_TYPE_S16: \ 204 PSIMAGE_ELEMENT_COPY(input,S16,OUT,OUTTYPE,elements); \ 205 break; \ 206 case PS_TYPE_S32: \ 207 PSIMAGE_ELEMENT_COPY(input,S32,OUT,OUTTYPE,elements); \ 208 break; \ 209 case PS_TYPE_S64: \ 210 PSIMAGE_ELEMENT_COPY(input,S64,OUT,OUTTYPE,elements); \ 211 break; \ 212 case PS_TYPE_U8: \ 213 PSIMAGE_ELEMENT_COPY(input,U8,OUT,OUTTYPE,elements); \ 214 break; \ 215 case PS_TYPE_U16: \ 216 PSIMAGE_ELEMENT_COPY(input,U16,OUT,OUTTYPE,elements); \ 217 break; \ 218 case PS_TYPE_U32: \ 219 PSIMAGE_ELEMENT_COPY(input,U32,OUT,OUTTYPE,elements); \ 220 break; \ 221 case PS_TYPE_U64: \ 222 PSIMAGE_ELEMENT_COPY(input,U64,OUT,OUTTYPE,elements); \ 223 break; \ 224 case PS_TYPE_F32: \ 225 PSIMAGE_ELEMENT_COPY(input,F32,OUT,OUTTYPE,elements); \ 226 break; \ 227 case PS_TYPE_F64: \ 228 PSIMAGE_ELEMENT_COPY(input,F64,OUT,OUTTYPE,elements); \ 229 break; \ 230 case PS_TYPE_C32: \ 231 PSIMAGE_ELEMENT_COPY(input,C32,OUT,OUTTYPE,elements); \ 232 break; \ 233 case PS_TYPE_C64: \ 234 PSIMAGE_ELEMENT_COPY(input,C64,OUT,OUTTYPE,elements); \ 235 break; \ 236 default: \ 237 break; \ 238 } \ 239 } 240 241 switch (type) { 242 case PS_TYPE_S8: 243 PSIMAGE_COPY_CASE(output, S8); 244 break; 245 case PS_TYPE_S16: 246 PSIMAGE_COPY_CASE(output, S16); 247 break; 248 case PS_TYPE_S32: 249 PSIMAGE_COPY_CASE(output, S32); 250 break; 251 case PS_TYPE_S64: 252 PSIMAGE_COPY_CASE(output, S64); 253 break; 254 case PS_TYPE_U8: 255 PSIMAGE_COPY_CASE(output, U8); 256 break; 257 case PS_TYPE_U16: 258 PSIMAGE_COPY_CASE(output, U16); 259 break; 260 case PS_TYPE_U32: 261 PSIMAGE_COPY_CASE(output, U32); 262 break; 263 case PS_TYPE_U64: 264 PSIMAGE_COPY_CASE(output, U64); 265 break; 266 case PS_TYPE_F32: 267 PSIMAGE_COPY_CASE(output, F32); 268 break; 269 case PS_TYPE_F64: 270 PSIMAGE_COPY_CASE(output, F64); 271 break; 272 case PS_TYPE_C32: 273 PSIMAGE_COPY_CASE(output, C32); 274 break; 275 case PS_TYPE_C64: 276 PSIMAGE_COPY_CASE(output, C64); 277 break; 278 default: { 279 char* typeStr; 280 PS_TYPE_NAME(typeStr,type); 281 psError(PS_ERR_BAD_PARAMETER_TYPE, true, 282 PS_ERRORTEXT_psImage_IMAGE_TYPE_UNSUPPORTED, 283 typeStr); 284 psFree(output); 285 286 break; 287 } 288 } 289 return output; 168 290 } 169 291 -
trunk/psLib/src/imageops/psImageStructManip.h
r3968 r3977 8 8 * @author Robert DeSonia, MHPCC 9 9 * 10 * @version $Revision: 1. 1$ $Name: not supported by cvs2svn $11 * @date $Date: 2005-05-19 0 2:08:21$10 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2005-05-19 05:18:20 $ 12 12 * 13 13 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 45 45 ); 46 46 47 /** Create a subimage of the specified area.47 /** Makes a copy of a psImage 48 48 * 49 * Uses psLib memory allocation functions to create an image based on a larger 50 * one. 51 * 52 * @return psImage* : Pointer to psImage. 49 * @return psImage* Copy of the input psImage. This may not be equal to the 50 * output parameter 53 51 * 54 52 */ 55 psImage* psImageSubsection( 56 psImage* image, ///< Parent image. 57 const char* section ///< Subsection in the form '[x1:x2,y1:y2]' 53 psImage* psImageCopy( 54 psImage* output, ///< if not NULL, a psImage that could be recycled. 55 const psImage* input, ///< the psImage to copy 56 psElemType type ///< the desired datatype of the returned copy 58 57 ); 59 58
Note:
See TracChangeset
for help on using the changeset viewer.
