IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 34627


Ignore:
Timestamp:
Oct 30, 2012, 2:51:40 PM (14 years ago)
Author:
watersc1
Message:

Add Mask overlay method that does the bitwise and of the inputs when both exist already.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/czw_branch/20120906/psLib/src/imageops/psImagePixelManip.c

    r34453 r34627  
    234234      pixelsOverlaid += (imageRowLimit - y0) * (imageColLimit - x0);    \
    235235    }
     236
     237#define psImageOverlayLoopMask(DATATYPE) {                  \
     238      for (int row=y0;row<imageRowLimit;row++) {            \
     239        ps##DATATYPE* imageRow = image->data.DATATYPE[row];        \
     240        ps##DATATYPE* overlayRow = overlay->data.DATATYPE[row-y0]; \
     241        for (int col=x0;col<imageColLimit;col++) {                 \
     242          if (!isfinite(imageRow[col])) {                          \
     243            imageRow[col] = overlayRow[col-x0];            \
     244          }                                                        \
     245          else if (!isfinite(overlayRow[col-x0])) {                \
     246            imageRow[col] = imageRow[col];                         \
     247          }                                                        \
     248          else {                                                   \
     249            imageRow[col] &= overlayRow[col-x0];                   \
     250          }                                                             \
     251        }                                                               \
     252      }                                                                 \
     253      pixelsOverlaid += (imageRowLimit - y0) * (imageColLimit - x0);    \
     254    }
    236255       
    237256   
     
    295314    case 'E': \
    296315      psImageOverlayLoopClean(DATATYPE,=); \
    297       break;                           \
     316      break;                               \
    298317    case '/': \
    299318        psImageOverlayLoopDivide(DATATYPE,BADVALUE); \
     
    309328    } \
    310329    break;
     330    #define psImageOverlayCaseInt(DATATYPE,BADVALUE) \
     331case PS_TYPE_##DATATYPE: \
     332    switch (*op) { \
     333    case '+': \
     334        psImageOverlayLoop(DATATYPE,+=); \
     335        break; \
     336    case '-': \
     337        psImageOverlayLoop(DATATYPE,-=); \
     338        break; \
     339    case '*': \
     340        psImageOverlayLoop(DATATYPE,*=); \
     341        break; \
     342    case 'E': \
     343      psImageOverlayLoopClean(DATATYPE,=); \
     344      break;                               \
     345    case 'M':                              \
     346      psImageOverlayLoopMask(DATATYPE);    \
     347      break;                               \
     348    case '/': \
     349        psImageOverlayLoopDivide(DATATYPE,BADVALUE); \
     350        break; \
     351    case '=': \
     352        psImageOverlaySetLoop(DATATYPE);                \
     353        break; \
     354    default: \
     355        psError(PS_ERR_BAD_PARAMETER_VALUE, true, \
     356                _("Specified operation, '%s', is not supported."), \
     357                op); \
     358        return pixelsOverlaid; \
     359    } \
     360    break;
    311361
    312362    switch (type) {
    313         psImageOverlayCase(U8, 0);
    314         psImageOverlayCase(U16,0);
    315         psImageOverlayCase(U32,0);       // Not a requirement
    316         psImageOverlayCase(U64,0);       // Not a requirement
    317         psImageOverlayCase(S8, 0);
    318         psImageOverlayCase(S16,0);
    319         psImageOverlayCase(S32,0);       // Not a requirement
    320         psImageOverlayCase(S64,0);       // Not a requirement
     363        psImageOverlayCaseInt(U8, 0);
     364        psImageOverlayCaseInt(U16,0);
     365        psImageOverlayCaseInt(U32,0);       // Not a requirement
     366        psImageOverlayCaseInt(U64,0);       // Not a requirement
     367        psImageOverlayCaseInt(S8, 0);
     368        psImageOverlayCaseInt(S16,0);
     369        psImageOverlayCaseInt(S32,0);       // Not a requirement
     370        psImageOverlayCaseInt(S64,0);       // Not a requirement
    321371        psImageOverlayCase(F32,NAN);
    322372        psImageOverlayCase(F64,NAN);
Note: See TracChangeset for help on using the changeset viewer.