Changeset 6887 for trunk/stac/src/stacSize.c
- Timestamp:
- Apr 18, 2006, 12:20:45 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/stac/src/stacSize.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/stac/src/stacSize.c
r3683 r6887 4 4 #include "stac.h" 5 5 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 6 bool 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 10 11 ) 11 12 { 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); 13 17 assert(maps->n == nImages); 14 assert(outnx && outny); // Must be able to write to these18 assert(outnx && outny); // Must be able to write to these 15 19 16 20 psPlane *inCoord = psAlloc(sizeof(psPlane)); // Input coordinates … … 24 28 25 29 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 28 33 29 psTrace("stac.size", 4, "Image %d:\n", i);34 psTrace("stac.size", 4, "Image %d:\n", i); 30 35 31 // Lower left corner32 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); 46 51 47 // Lower right corner48 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); 61 66 62 // Upper right corner63 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); 77 82 78 // Upper left corner79 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); 92 97 } 93 98 94 99 // Tweak the maps to account for the offset 95 100 if (xMapDiff != NULL) { 96 *xMapDiff = floorf(xMin);101 *xMapDiff = floorf(xMin); 97 102 } 98 103 if (yMapDiff != NULL) { 99 *yMapDiff = floorf(yMin);104 *yMapDiff = floorf(yMin); 100 105 } 101 106 for (int i = 0; i < nImages; i++) { 102 psPlaneTransform *map = maps->data[i]; // The map of interest103 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); 105 110 } 106 111
Note:
See TracChangeset
for help on using the changeset viewer.
