IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 18, 2005, 7:18:20 PM (21 years ago)
Author:
desonia
Message:

fixes to psRegion.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/image/psImage.c

    r3786 r3977  
    99 *  @author Ross Harman, MHPCC
    1010 *
    11  *  @version $Revision: 1.65 $ $Name: not supported by cvs2svn $
    12  *  @date $Date: 2005-04-29 02:25:10 $
     11 *  @version $Revision: 1.66 $ $Name: not supported by cvs2svn $
     12 *  @date $Date: 2005-05-19 05:18:20 $
    1313 *
    1414 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    9191}
    9292
    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;
     93psRegion 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;
    104104
    105105    return out;
    106106}
    107107
    108 psRegion* psRegionFromString(char* region)
     108psRegion psRegionFromString(char* region)
    109109{
    110110    psS32 col0;
     
    117117        psError(PS_ERR_BAD_PARAMETER_NULL, true,
    118118                PS_ERRORTEXT_psImage_SUBSECTION_NULL);
    119         return NULL;
     119        return psRegionSet(NAN,NAN,NAN,NAN);
    120120    }
    121121
     
    124124                PS_ERRORTEXT_psImage_SUBSECTION_INVALID,
    125125                region);
    126         return NULL;
     126        return psRegionSet(NAN,NAN,NAN,NAN);
    127127    }
    128128
     
    131131                PS_ERRORTEXT_psImage_SUBSET_RANGE_MALFORMED,
    132132                col0,col1,row0,row1);
    133         return NULL;
    134     }
    135 
    136     return psRegionAlloc(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
     139char* psRegionToString(psRegion region)
    140140{
    141141    char tmpText[256]; // big enough to store any region as text
    142142
    143     if (region == NULL) {
    144         psError(PS_ERR_BAD_PARAMETER_NULL, true,
    145                 PS_ERRORTEXT_psImage_REGION_NULL);
    146         return NULL;
    147     }
    148 
    149143    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);
    152146
    153147    return psStringCopy(tmpText);
     
    195189
    196190    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 same
    239     // 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;
    351191}
    352192
Note: See TracChangeset for help on using the changeset viewer.