Changeset 2067 for trunk/psLib/src/image/psImageExtraction.c
- Timestamp:
- Oct 12, 2004, 2:10:50 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/image/psImageExtraction.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/image/psImageExtraction.c
r1962 r2067 9 9 * @author Robert DeSonia, MHPCC 10 10 * 11 * @version $Revision: 1.2 1$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-10- 05 22:23:04$11 * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-10-13 00:10:50 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 23 23 24 24 #include "psImageErrors.h" 25 26 25 27 26 psImage* imageSubset(psImage* out, … … 236 235 237 236 return (image); 238 }239 240 psImage* psImageCopy(psImage* restrict output,241 const psImage* input,242 psElemType type)243 {244 psElemType inDatatype;245 int elementSize;246 int elements;247 int numRows;248 int numCols;249 250 if (input == NULL || input->data.V == NULL) {251 psErrorMsg(PS_ERRORNAME_DOMAIN "psImageCopy",252 PS_ERR_BAD_PARAMETER_NULL, true,253 PS_ERRORTEXT_psImage_IMAGE_NULL);254 psFree(output);255 return NULL;256 }257 258 if (input == output) {259 psErrorMsg(PS_ERRORNAME_DOMAIN "psImageCopy",260 PS_ERR_BAD_PARAMETER_NULL, true,261 PS_ERRORTEXT_psImage_INPLACE_NOTSUPPORTED);262 psFree(output);263 return NULL;264 }265 266 if (input->type.dimen != PS_DIMEN_IMAGE) {267 psErrorMsg(PS_ERRORNAME_DOMAIN "psImageCopy",268 PS_ERR_BAD_PARAMETER_TYPE, true,269 PS_ERRORTEXT_psImage_NOT_AN_IMAGE);270 psFree(output);271 return NULL;272 }273 274 inDatatype = input->type.type;275 numRows = input->numRows;276 numCols = input->numCols;277 elements = numRows * numCols;278 elementSize = PSELEMTYPE_SIZEOF(inDatatype);279 280 if (inDatatype == PS_TYPE_PTR || type == PS_TYPE_PTR) {281 psErrorMsg(PS_ERRORNAME_DOMAIN "psImageCopy",282 PS_ERR_BAD_PARAMETER_TYPE, true,283 PS_ERRORTEXT_psImage_IMAGE_TYPE_UNSUPPORTED,284 PS_TYPE_PTR_NAME);285 psFree(output);286 return NULL;287 }288 289 output = psImageRecycle(output, numCols, numRows, type);290 291 // cover the trival case of copy of the same292 // datatype.293 if (type == inDatatype) {294 for (int row=0;row<numRows;row++) {295 memcpy(output->data.V[row], input->data.V[row], elementSize * numCols);296 }297 return output;298 }299 300 #define PSIMAGE_ELEMENT_COPY(IN,INTYPE,OUT,OUTTYPE,ELEMENTS) { \301 ps##INTYPE *in; \302 ps##OUTTYPE *out; \303 for(int row=0;row<numRows;row++) { \304 in = IN->data.INTYPE[row]; \305 out = OUT->data.OUTTYPE[row]; \306 for (int col=0;col<numCols;col++) { \307 *(out++) = *(in++); \308 } \309 } \310 }311 312 #define PSIMAGE_COPY_CASE(OUT,OUTTYPE) { \313 switch (inDatatype) { \314 case PS_TYPE_S8: \315 PSIMAGE_ELEMENT_COPY(input,S8,OUT,OUTTYPE,elements); \316 break; \317 case PS_TYPE_S16: \318 PSIMAGE_ELEMENT_COPY(input,S16,OUT,OUTTYPE,elements); \319 break; \320 case PS_TYPE_S32: \321 PSIMAGE_ELEMENT_COPY(input,S32,OUT,OUTTYPE,elements); \322 break; \323 case PS_TYPE_S64: \324 PSIMAGE_ELEMENT_COPY(input,S64,OUT,OUTTYPE,elements); \325 break; \326 case PS_TYPE_U8: \327 PSIMAGE_ELEMENT_COPY(input,U8,OUT,OUTTYPE,elements); \328 break; \329 case PS_TYPE_U16: \330 PSIMAGE_ELEMENT_COPY(input,U16,OUT,OUTTYPE,elements); \331 break; \332 case PS_TYPE_U32: \333 PSIMAGE_ELEMENT_COPY(input,U32,OUT,OUTTYPE,elements); \334 break; \335 case PS_TYPE_U64: \336 PSIMAGE_ELEMENT_COPY(input,U64,OUT,OUTTYPE,elements); \337 break; \338 case PS_TYPE_F32: \339 PSIMAGE_ELEMENT_COPY(input,F32,OUT,OUTTYPE,elements); \340 break; \341 case PS_TYPE_F64: \342 PSIMAGE_ELEMENT_COPY(input,F64,OUT,OUTTYPE,elements); \343 break; \344 case PS_TYPE_C32: \345 PSIMAGE_ELEMENT_COPY(input,C32,OUT,OUTTYPE,elements); \346 break; \347 case PS_TYPE_C64: \348 PSIMAGE_ELEMENT_COPY(input,C64,OUT,OUTTYPE,elements); \349 break; \350 default: \351 break; \352 } \353 }354 355 switch (type) {356 case PS_TYPE_S8:357 PSIMAGE_COPY_CASE(output, S8);358 break;359 case PS_TYPE_S16:360 PSIMAGE_COPY_CASE(output, S16);361 break;362 case PS_TYPE_S32:363 PSIMAGE_COPY_CASE(output, S32);364 break;365 case PS_TYPE_S64:366 PSIMAGE_COPY_CASE(output, S64);367 break;368 case PS_TYPE_U8:369 PSIMAGE_COPY_CASE(output, U8);370 break;371 case PS_TYPE_U16:372 PSIMAGE_COPY_CASE(output, U16);373 break;374 case PS_TYPE_U32:375 PSIMAGE_COPY_CASE(output, U32);376 break;377 case PS_TYPE_U64:378 PSIMAGE_COPY_CASE(output, U64);379 break;380 case PS_TYPE_F32:381 PSIMAGE_COPY_CASE(output, F32);382 break;383 case PS_TYPE_F64:384 PSIMAGE_COPY_CASE(output, F64);385 break;386 case PS_TYPE_C32:387 PSIMAGE_COPY_CASE(output, C32);388 break;389 case PS_TYPE_C64:390 PSIMAGE_COPY_CASE(output, C64);391 break;392 default: {393 char* typeStr;394 PS_TYPE_NAME(typeStr,type);395 psErrorMsg(PS_ERRORNAME_DOMAIN "psImageCopy",396 PS_ERR_BAD_PARAMETER_TYPE, true,397 PS_ERRORTEXT_psImage_IMAGE_TYPE_UNSUPPORTED,398 typeStr);399 psFree(output);400 401 break;402 }403 }404 return output;405 237 } 406 238
Note:
See TracChangeset
for help on using the changeset viewer.
