IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 4, 2005, 5:51:43 PM (21 years ago)
Author:
drobbin
Message:

Updated/fixed Image Mask/Keep fxns and implemented tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/imageops/psImagePixelManip.c

    r5064 r5224  
    1010 *  @author Ross Harman, MHPCC
    1111 *
    12  *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2005-09-16 23:56:48 $
     12 *  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2005-10-05 03:51:43 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    403403                       psMaskType maskValue)
    404404{
    405 
    406     for (int iy = 0; iy < image->numRows; iy++) {
    407         for (int ix = 0; ix < image->numCols; ix++) {
    408             if (ix + image->col0 <  region.x0)
    409                 continue;
    410             if (ix + image->col0 >= region.x1)
    411                 continue;
    412             if (iy + image->row0 <  region.y0)
    413                 continue;
    414             if (iy + image->row0 >= region.y1)
    415                 continue;
    416             if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
    417                 image->data.U8[iy][ix] &= maskValue;
    418             } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
    419                 image->data.U8[iy][ix] |= maskValue;
    420             } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
    421                 image->data.U8[iy][ix] = maskValue;
    422             } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
    423                 image->data.U8[iy][ix] ^= maskValue;
     405    for (int j = 0; j < image->numRows; j++) {
     406        for (int i = 0; i < image->numCols; i++) {
     407            if ( (j + image->row0) >= region.y0 &&
     408                    (j + image->row0) <= region.y1 &&
     409                    (i + image->col0) >= region.x0 &&
     410                    (i + image->col0) <= region.x1 ) {
     411                if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
     412                    image->data.PS_TYPE_MASK_DATA[j][i] &= maskValue;
     413                } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
     414                    image->data.PS_TYPE_MASK_DATA[j][i] |= maskValue;
     415                } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
     416                    image->data.PS_TYPE_MASK_DATA[j][i] = maskValue;
     417                } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
     418                    image->data.PS_TYPE_MASK_DATA[j][i] ^= maskValue;
     419                } else {
     420                    psError(PS_ERR_BAD_PARAMETER_VALUE,true,
     421                            "The logical operation specified is incorrect\n");
     422                    return;
     423                }
    424424            }
    425425        }
    426426    }
     427    /*
     428        for (int iy = 0; iy < image->numRows; iy++) {
     429            for (int ix = 0; ix < image->numCols; ix++) {
     430                if (ix + image->col0 >=  region.x0)
     431                    continue;
     432                if (ix + image->col0 <= region.x1)
     433                    continue;
     434                if (iy + image->row0 >=  region.y0)
     435                    continue;
     436                if (iy + image->row0 <= region.y1)
     437                    continue;
     438                if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
     439                    image->data.PS_TYPE_MASK_DATA[iy][ix] &= maskValue;
     440                } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
     441                    image->data.PS_TYPE_MASK_DATA[iy][ix] |= maskValue;
     442                } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
     443                    image->data.PS_TYPE_MASK_DATA[iy][ix] = maskValue;
     444                } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
     445                    image->data.PS_TYPE_MASK_DATA[iy][ix] ^= maskValue;
     446                }
     447            }
     448        }
     449    */
    427450}
    428451
     
    434457                       psMaskType maskValue)
    435458{
    436 
    437     for (int iy = 0; iy < image->numRows; iy++) {
    438         for (int ix = 0; ix < image->numCols; ix++) {
    439             if (ix + image->col0 <  region.x0)
    440                 goto maskit;
    441             if (ix + image->col0 >= region.x1)
    442                 goto maskit;
    443             if (iy + image->row0 <  region.y0)
    444                 goto maskit;
    445             if (iy + image->row0 >= region.y1)
    446                 goto maskit;
    447             continue;
    448 maskit:
    449             if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
    450                 image->data.U8[iy][ix] &= maskValue;
    451             } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
    452                 image->data.U8[iy][ix] |= maskValue;
    453             } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
    454                 image->data.U8[iy][ix] = maskValue;
    455             } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
    456                 image->data.U8[iy][ix] ^= maskValue;
     459    for (int j = 0; j < image->numRows; j++) {
     460        for (int i = 0; i < image->numCols; i++) {
     461            if ( (j + image->row0) < region.y0 ||
     462                    (j + image->row0) > region.y1 ||
     463                    (i + image->col0) < region.x0 ||
     464                    (i + image->col0) > region.x1 ) {
     465                if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
     466                    image->data.PS_TYPE_MASK_DATA[j][i] &= maskValue;
     467                } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
     468                    image->data.PS_TYPE_MASK_DATA[j][i] |= maskValue;
     469                } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
     470                    image->data.PS_TYPE_MASK_DATA[j][i] = maskValue;
     471                } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
     472                    image->data.PS_TYPE_MASK_DATA[j][i] ^= maskValue;
     473                } else {
     474                    psError(PS_ERR_BAD_PARAMETER_VALUE,true,
     475                            "The logical operation specified is incorrect\n");
     476                    return;
     477                }
    457478            }
    458479        }
    459480    }
     481    /*
     482        for (int iy = 0; iy < image->numRows; iy++) {
     483            for (int ix = 0; ix < image->numCols; ix++) {
     484                if (ix + image->col0 <  region.x0)
     485                    goto maskit;
     486                if (ix + image->col0 > region.x1)
     487                    goto maskit;
     488                if (iy + image->row0 <  region.y0)
     489                    goto maskit;
     490                if (iy + image->row0 > region.y1)
     491                    goto maskit;
     492                continue;
     493    maskit:
     494                if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
     495                    image->data.PS_TYPE_MASK_DATA[iy][ix] &= maskValue;
     496                } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
     497                    image->data.PS_TYPE_MASK_DATA[iy][ix] |= maskValue;
     498                } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
     499                    image->data.PS_TYPE_MASK_DATA[iy][ix] = maskValue;
     500                } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
     501                    image->data.PS_TYPE_MASK_DATA[iy][ix] ^= maskValue;
     502                }
     503            }
     504        }
     505    */
    460506}
    461507
     
    469515                       psMaskType maskValue)
    470516{
     517    if (image == NULL) {
     518        psError(PS_ERR_BAD_PARAMETER_NULL, true,
     519                "Invalid image input.  Image is NULL.\n");
     520        return;
     521    }
     522
    471523
    472524    double dx, dy, r2, R2;
     
    479531            dy = iy + image->row0 - y;
    480532            r2 = PS_SQR(dx) + PS_SQR(dy);
    481             if (r2 > R2)
    482                 continue;
    483             if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
    484                 image->data.U8[iy][ix] &= maskValue;
    485             } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
    486                 image->data.U8[iy][ix] |= maskValue;
    487             } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
    488                 image->data.U8[iy][ix] = maskValue;
    489             } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
    490                 image->data.U8[iy][ix] ^= maskValue;
     533            if (r2 <= R2) {
     534                if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
     535                    image->data.PS_TYPE_MASK_DATA[iy][ix] &= maskValue;
     536                } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
     537                    image->data.PS_TYPE_MASK_DATA[iy][ix] |= maskValue;
     538                } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
     539                    image->data.PS_TYPE_MASK_DATA[iy][ix] = maskValue;
     540                } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
     541                    image->data.PS_TYPE_MASK_DATA[iy][ix] ^= maskValue;
     542                } else {
     543                    psError(PS_ERR_BAD_PARAMETER_VALUE,true,
     544                            "The logical operation specified is incorrect\n");
     545                    return;
     546                }
    491547            }
    492548        }
     
    513569            dy = iy + image->row0 - y;
    514570            r2 = PS_SQR(dx) + PS_SQR(dy);
    515             if (r2 < R2)
    516                 continue;
    517             if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
    518                 image->data.U8[iy][ix] &= maskValue;
    519             } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
    520                 image->data.U8[iy][ix] |= maskValue;
    521             } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
    522                 image->data.U8[iy][ix] = maskValue;
    523             } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
    524                 image->data.U8[iy][ix] ^= maskValue;
     571            if (r2 > R2) {
     572                if ( !strncmp(op, "&", 2) || !strncmp(op, "AND", 5) ) {
     573                    image->data.PS_TYPE_MASK_DATA[iy][ix] &= maskValue;
     574                } else if ( !strncmp(op, "|", 2) || !strncmp(op, "OR", 5) ) {
     575                    image->data.PS_TYPE_MASK_DATA[iy][ix] |= maskValue;
     576                } else if ( !strncmp(op, "=", 2) || !strncmp(op, "EQUAL", 5) ) {
     577                    image->data.PS_TYPE_MASK_DATA[iy][ix] = maskValue;
     578                } else if ( !strncmp(op, "^", 2) || !strncmp(op, "XOR", 5) ) {
     579                    image->data.PS_TYPE_MASK_DATA[iy][ix] ^= maskValue;
     580                } else {
     581                    psError(PS_ERR_BAD_PARAMETER_VALUE,true,
     582                            "The logical operation specified is incorrect\n");
     583                    return;
     584                }
    525585            }
    526586        }
Note: See TracChangeset for help on using the changeset viewer.