IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 18, 2006, 12:20:45 PM (20 years ago)
Author:
Paul Price
Message:

Updating to use psLib rel11. Main problem was that vector and array lengths ('n' element) are no longer set to equal the number of allocated values ('nalloc' element) when allocated.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/stac/src/stacSize.c

    r3683 r6887  
    44#include "stac.h"
    55
    6 bool stacSize(int *outnx, int *outny,   // Size of output image (returned)
    7               float *xMapDiff, float *yMapDiff, // Difference applied to maps
    8               const psArray *images,    // Input images
    9               psArray *maps             // Transformation maps
     6bool stacSize(int *outnx, int *outny,   // Size of output image (returned)
     7              float *xMapDiff, float *yMapDiff, // Difference applied to maps
     8              const psVector *xSizes,   // Sizes of images in x
     9              const psVector *ySizes,   // Sizes of images in y
     10              psArray *maps             // Transformation maps
    1011    )
    1112{
    12     int nImages = images->n;            // Number of input images
     13    int nImages = xSizes->n;            // Number of input images
     14    assert(ySizes->n == nImages);
     15    assert(xSizes->type.type == PS_TYPE_S32);
     16    assert(ySizes->type.type == PS_TYPE_S32);
    1317    assert(maps->n == nImages);
    14     assert(outnx && outny);             // Must be able to write to these
     18    assert(outnx && outny);             // Must be able to write to these
    1519
    1620    psPlane *inCoord = psAlloc(sizeof(psPlane)); // Input coordinates
     
    2428
    2529    for (int i = 0; i < nImages; i++) {
    26         psImage *image = images->data[i]; // The image
    27         psPlaneTransform *map = maps->data[i]; // The map
     30        int xSize = xSizes->data.S32[i];// Size of image in x
     31        int ySize = ySizes->data.S32[i];// Size of image in y
     32        psPlaneTransform *map = maps->data[i]; // The map
    2833
    29         psTrace("stac.size", 4, "Image %d:\n", i);
     34        psTrace("stac.size", 4, "Image %d:\n", i);
    3035
    31         // Lower left corner
    32         inCoord->x = 0.0;
    33         inCoord->y = 0.0;
    34         (void)psPlaneTransformApply(outCoord, map, inCoord);
    35         if (outCoord->x < xMin) {
    36             xMin = outCoord->x;
    37         } else if (outCoord->x > xMax) {
    38             xMax = outCoord->x;
    39         }
    40         if (outCoord->y < yMin) {
    41             yMin = outCoord->y;
    42         } else if (outCoord->y > yMax) {
    43             yMax = outCoord->y;
    44         }
    45         psTrace("stac.size", 4, "Lower left: %f %f\n", outCoord->x, outCoord->y);
     36        // Lower left corner
     37        inCoord->x = 0.0;
     38        inCoord->y = 0.0;
     39        (void)psPlaneTransformApply(outCoord, map, inCoord);
     40        if (outCoord->x < xMin) {
     41            xMin = outCoord->x;
     42        } else if (outCoord->x > xMax) {
     43            xMax = outCoord->x;
     44        }
     45        if (outCoord->y < yMin) {
     46            yMin = outCoord->y;
     47        } else if (outCoord->y > yMax) {
     48            yMax = outCoord->y;
     49        }
     50        psTrace("stac.size", 4, "Lower left: %f %f\n", outCoord->x, outCoord->y);
    4651
    47         // Lower right corner
    48         inCoord->x = image->numCols;
    49         (void)psPlaneTransformApply(outCoord, map, inCoord);
    50         if (outCoord->x < xMin) {
    51             xMin = outCoord->x;
    52         } else if (outCoord->x > xMax) {
    53             xMax = outCoord->x;
    54         }
    55         if (outCoord->y < yMin) {
    56             yMin = outCoord->y;
    57         } else if (outCoord->y > yMax) {
    58             yMax = outCoord->y;
    59         }
    60         psTrace("stac.size", 4, "Lower right: %f %f\n", outCoord->x, outCoord->y);
     52        // Lower right corner
     53        inCoord->x = xSize;
     54        (void)psPlaneTransformApply(outCoord, map, inCoord);
     55        if (outCoord->x < xMin) {
     56            xMin = outCoord->x;
     57        } else if (outCoord->x > xMax) {
     58            xMax = outCoord->x;
     59        }
     60        if (outCoord->y < yMin) {
     61            yMin = outCoord->y;
     62        } else if (outCoord->y > yMax) {
     63            yMax = outCoord->y;
     64        }
     65        psTrace("stac.size", 4, "Lower right: %f %f\n", outCoord->x, outCoord->y);
    6166
    62         // Upper right corner
    63         inCoord->x = 0.0;
    64         inCoord->y = image->numRows;
    65         (void)psPlaneTransformApply(outCoord, map, inCoord);
    66         if (outCoord->x < xMin) {
    67             xMin = outCoord->x;
    68         } else if (outCoord->x > xMax) {
    69             xMax = outCoord->x;
    70         }
    71         if (outCoord->y < yMin) {
    72             yMin = outCoord->y;
    73         } else if (outCoord->y > yMax) {
    74             yMax = outCoord->y;
    75         }
    76         psTrace("stac.size", 4, "Upper right: %f %f\n", outCoord->x, outCoord->y);
     67        // Upper right corner
     68        inCoord->x = 0.0;
     69        inCoord->y = ySize;
     70        (void)psPlaneTransformApply(outCoord, map, inCoord);
     71        if (outCoord->x < xMin) {
     72            xMin = outCoord->x;
     73        } else if (outCoord->x > xMax) {
     74            xMax = outCoord->x;
     75        }
     76        if (outCoord->y < yMin) {
     77            yMin = outCoord->y;
     78        } else if (outCoord->y > yMax) {
     79            yMax = outCoord->y;
     80        }
     81        psTrace("stac.size", 4, "Upper right: %f %f\n", outCoord->x, outCoord->y);
    7782
    78         // Upper left corner
    79         inCoord->x = image->numCols;
    80         (void)psPlaneTransformApply(outCoord, map, inCoord);
    81         if (outCoord->x < xMin) {
    82             xMin = outCoord->x;
    83         } else if (outCoord->x > xMax) {
    84             xMax = outCoord->x;
    85         }
    86         if (outCoord->y < yMin) {
    87             yMin = outCoord->y;
    88         } else if (outCoord->y > yMax) {
    89             yMax = outCoord->y;
    90         }
    91         psTrace("stac.size", 4, "Upper left: %f %f\n", outCoord->x, outCoord->y);
     83        // Upper left corner
     84        inCoord->x = xSize;
     85        (void)psPlaneTransformApply(outCoord, map, inCoord);
     86        if (outCoord->x < xMin) {
     87            xMin = outCoord->x;
     88        } else if (outCoord->x > xMax) {
     89            xMax = outCoord->x;
     90        }
     91        if (outCoord->y < yMin) {
     92            yMin = outCoord->y;
     93        } else if (outCoord->y > yMax) {
     94            yMax = outCoord->y;
     95        }
     96        psTrace("stac.size", 4, "Upper left: %f %f\n", outCoord->x, outCoord->y);
    9297    }
    9398
    9499    // Tweak the maps to account for the offset
    95100    if (xMapDiff != NULL) {
    96         *xMapDiff = floorf(xMin);
     101        *xMapDiff = floorf(xMin);
    97102    }
    98103    if (yMapDiff != NULL) {
    99         *yMapDiff = floorf(yMin);
     104        *yMapDiff = floorf(yMin);
    100105    }
    101106    for (int i = 0; i < nImages; i++) {
    102         psPlaneTransform *map = maps->data[i]; // The map of interest
    103         map->x->coeff[0][0] -= floorf(xMin);
    104         map->y->coeff[0][0] -= floorf(yMin);
     107        psPlaneTransform *map = maps->data[i]; // The map of interest
     108        map->x->coeff[0][0] -= floorf(xMin);
     109        map->y->coeff[0][0] -= floorf(yMin);
    105110    }
    106111
Note: See TracChangeset for help on using the changeset viewer.