Changeset 3977 for trunk/psLib/src/image/psImage.c
- Timestamp:
- May 18, 2005, 7:18:20 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/image/psImage.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/image/psImage.c
r3786 r3977 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.6 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2005-0 4-29 02:25:10 $11 * @version $Revision: 1.66 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2005-05-19 05:18:20 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 91 91 } 92 92 93 psRegion * psRegionAlloc(psF32 x0,94 psF32 x1,95 psF32 y0,96 psF32 y1)97 { 98 psRegion * out = psAlloc(sizeof(psRegion));99 100 out ->x0 = x0;101 out ->y0 = y0;102 out ->x1 = x1;103 out ->y1 = y1;93 psRegion psRegionSet(psF32 x0, 94 psF32 x1, 95 psF32 y0, 96 psF32 y1) 97 { 98 psRegion out; 99 100 out.x0 = x0; 101 out.y0 = y0; 102 out.x1 = x1; 103 out.y1 = y1; 104 104 105 105 return out; 106 106 } 107 107 108 psRegion *psRegionFromString(char* region)108 psRegion psRegionFromString(char* region) 109 109 { 110 110 psS32 col0; … … 117 117 psError(PS_ERR_BAD_PARAMETER_NULL, true, 118 118 PS_ERRORTEXT_psImage_SUBSECTION_NULL); 119 return NULL;119 return psRegionSet(NAN,NAN,NAN,NAN); 120 120 } 121 121 … … 124 124 PS_ERRORTEXT_psImage_SUBSECTION_INVALID, 125 125 region); 126 return NULL;126 return psRegionSet(NAN,NAN,NAN,NAN); 127 127 } 128 128 … … 131 131 PS_ERRORTEXT_psImage_SUBSET_RANGE_MALFORMED, 132 132 col0,col1,row0,row1); 133 return NULL;134 } 135 136 return psRegion Alloc(col0,col1,row0,row1);137 } 138 139 char* psRegionToString(psRegion *region)133 return psRegionSet(NAN,NAN,NAN,NAN); 134 } 135 136 return psRegionSet(col0,col1,row0,row1); 137 } 138 139 char* psRegionToString(psRegion region) 140 140 { 141 141 char tmpText[256]; // big enough to store any region as text 142 142 143 if (region == NULL) {144 psError(PS_ERR_BAD_PARAMETER_NULL, true,145 PS_ERRORTEXT_psImage_REGION_NULL);146 return NULL;147 }148 149 143 snprintf(tmpText,256,"[%g:%g,%g:%g]", 150 region ->x0, region->x1,151 region ->y0, region->y1);144 region.x0, region.x1, 145 region.y0, region.y1); 152 146 153 147 return psStringCopy(tmpText); … … 195 189 196 190 return old; 197 }198 199 psImage* psImageCopy(psImage* output,200 const psImage* input,201 psElemType type)202 {203 psElemType inDatatype;204 psS32 elementSize;205 psS32 elements;206 psS32 numRows;207 psS32 numCols;208 209 if (input == NULL || input->data.V == NULL) {210 psError(PS_ERR_BAD_PARAMETER_NULL, true,211 PS_ERRORTEXT_psImage_IMAGE_NULL);212 psFree(output);213 return NULL;214 }215 216 if (input == output) {217 psError(PS_ERR_BAD_PARAMETER_NULL, true,218 PS_ERRORTEXT_psImage_INPLACE_NOTSUPPORTED);219 psFree(output);220 return NULL;221 }222 223 if (input->type.dimen != PS_DIMEN_IMAGE) {224 psError(PS_ERR_BAD_PARAMETER_TYPE, true,225 PS_ERRORTEXT_psImage_NOT_AN_IMAGE);226 psFree(output);227 return NULL;228 }229 230 inDatatype = input->type.type;231 numRows = input->numRows;232 numCols = input->numCols;233 elements = numRows * numCols;234 elementSize = PSELEMTYPE_SIZEOF(inDatatype);235 236 output = psImageRecycle(output, numCols, numRows, type);237 238 // cover the trival case of copy of the same239 // datatype.240 if (type == inDatatype) {241 for (psS32 row=0;row<numRows;row++) {242 memcpy(output->data.V[row], input->data.V[row], elementSize * numCols);243 }244 return output;245 }246 247 #define PSIMAGE_ELEMENT_COPY(IN,INTYPE,OUT,OUTTYPE,ELEMENTS) { \248 ps##INTYPE *in; \249 ps##OUTTYPE *out; \250 for(psS32 row=0;row<numRows;row++) { \251 in = IN->data.INTYPE[row]; \252 out = OUT->data.OUTTYPE[row]; \253 for (psS32 col=0;col<numCols;col++) { \254 *(out++) = *(in++); \255 } \256 } \257 }258 259 #define PSIMAGE_COPY_CASE(OUT,OUTTYPE) { \260 switch (inDatatype) { \261 case PS_TYPE_S8: \262 PSIMAGE_ELEMENT_COPY(input,S8,OUT,OUTTYPE,elements); \263 break; \264 case PS_TYPE_S16: \265 PSIMAGE_ELEMENT_COPY(input,S16,OUT,OUTTYPE,elements); \266 break; \267 case PS_TYPE_S32: \268 PSIMAGE_ELEMENT_COPY(input,S32,OUT,OUTTYPE,elements); \269 break; \270 case PS_TYPE_S64: \271 PSIMAGE_ELEMENT_COPY(input,S64,OUT,OUTTYPE,elements); \272 break; \273 case PS_TYPE_U8: \274 PSIMAGE_ELEMENT_COPY(input,U8,OUT,OUTTYPE,elements); \275 break; \276 case PS_TYPE_U16: \277 PSIMAGE_ELEMENT_COPY(input,U16,OUT,OUTTYPE,elements); \278 break; \279 case PS_TYPE_U32: \280 PSIMAGE_ELEMENT_COPY(input,U32,OUT,OUTTYPE,elements); \281 break; \282 case PS_TYPE_U64: \283 PSIMAGE_ELEMENT_COPY(input,U64,OUT,OUTTYPE,elements); \284 break; \285 case PS_TYPE_F32: \286 PSIMAGE_ELEMENT_COPY(input,F32,OUT,OUTTYPE,elements); \287 break; \288 case PS_TYPE_F64: \289 PSIMAGE_ELEMENT_COPY(input,F64,OUT,OUTTYPE,elements); \290 break; \291 case PS_TYPE_C32: \292 PSIMAGE_ELEMENT_COPY(input,C32,OUT,OUTTYPE,elements); \293 break; \294 case PS_TYPE_C64: \295 PSIMAGE_ELEMENT_COPY(input,C64,OUT,OUTTYPE,elements); \296 break; \297 default: \298 break; \299 } \300 }301 302 switch (type) {303 case PS_TYPE_S8:304 PSIMAGE_COPY_CASE(output, S8);305 break;306 case PS_TYPE_S16:307 PSIMAGE_COPY_CASE(output, S16);308 break;309 case PS_TYPE_S32:310 PSIMAGE_COPY_CASE(output, S32);311 break;312 case PS_TYPE_S64:313 PSIMAGE_COPY_CASE(output, S64);314 break;315 case PS_TYPE_U8:316 PSIMAGE_COPY_CASE(output, U8);317 break;318 case PS_TYPE_U16:319 PSIMAGE_COPY_CASE(output, U16);320 break;321 case PS_TYPE_U32:322 PSIMAGE_COPY_CASE(output, U32);323 break;324 case PS_TYPE_U64:325 PSIMAGE_COPY_CASE(output, U64);326 break;327 case PS_TYPE_F32:328 PSIMAGE_COPY_CASE(output, F32);329 break;330 case PS_TYPE_F64:331 PSIMAGE_COPY_CASE(output, F64);332 break;333 case PS_TYPE_C32:334 PSIMAGE_COPY_CASE(output, C32);335 break;336 case PS_TYPE_C64:337 PSIMAGE_COPY_CASE(output, C64);338 break;339 default: {340 char* typeStr;341 PS_TYPE_NAME(typeStr,type);342 psError(PS_ERR_BAD_PARAMETER_TYPE, true,343 PS_ERRORTEXT_psImage_IMAGE_TYPE_UNSUPPORTED,344 typeStr);345 psFree(output);346 347 break;348 }349 }350 return output;351 191 } 352 192
Note:
See TracChangeset
for help on using the changeset viewer.
