From: D M G. <dm...@uv...> - 2012-03-05 19:08:09
|
Hi everybody, Last week I was completely without an Internet connection. I am glad you decided to merge the branch. I suspect (almost) nobody bothered to check it out. I compiled under ubuntu 11.10 and it passed the tests. We will have to wait and see what people thing. I suspect not many people know that we can convert to PSD from tiff. by the way, people should be warned that the algorithm used for it is O(n^2) in terms of I/O. Reaaaaallly slow for multiple layers with big images. --dmg panotools-cvs> branch: panotools-cvs> details: http://panotools.hg.sourceforge.net/hgweb/panotools/panotools/hgroot/panotools/libpano/rev/0c73d8794377 panotools-cvs> changeset: 761:0c73d8794377 panotools-cvs> user: Bruno Postle <br...@po...> panotools-cvs> date: Fri Mar 02 23:19:11 2012 +0000 panotools-cvs> description: panotools-cvs> merged PSD branch panotools-cvs> diffstat: CMakeLists.txt | 1 + LocalDefs.props | 15 + PTcommon.c | 375 +- PTcommon.h | 4 + ZComb.c | 18 +- adjust.c | 38 +- correct.c | 6 +- file.c | 2338 +++++---- file.h | 2 + filter.c | 112 +- filter.h | 97 +- libpano.sln | 61 +- libpano.vcxproj | 533 ++ pano13vc.def | 2 + png.c | 12 +- pteditor.c | 6 +- resample.c | 4 +- sys_ansi.c | 16 + sys_compat.h | 30 + sys_win.c | 55 + tests/CMakeLists.txt | 10 + tests/panoAutomatePSDtest.pl | 31 + tests/simpleTiff2psd/CMakeLists.txt | 28 + tests/simpleTiff2psd/reference/simpleStitch_crop_1_layer.psd | 0 tests/simpleTiff2psd/reference/simpleStitch_crop_2_layer.psd | 0 tests/simpleTiff2psd/reference/simpleStitch_uncrop_1_layer.psd | 0 tests/simpleTiff2psd/reference/simpleStitch_uncrop_2_layer.psd | 0 tests/simpleTiff2psd/reference/simpleTiff16-16-_uncrop_1_layer.psd | 0 tests/simpleTiff2psd/reference/simpleTiff16-16-_uncrop_2_layer.psd | 0 tests/simpleTiff2psd/tests/simpleStitch_crop_1_layer.psd | 0 tests/simpleTiff2psd/tests/simpleStitch_crop_2_layer.psd | 0 tests/simpleTiff2psd/tests/simpleStitch_uncrop_1_layer.psd | 0 tests/simpleTiff2psd/tests/simpleStitch_uncrop_2_layer.psd | 0 tests/simpleTiff2psd/tests/simpleTiff16-16-_uncrop_1_layer.psd | 0 tests/simpleTiff2psd/tests/simpleTiff16-16-_uncrop_2_layer.psd | 0 tests/tiff2psdTest.bat | 9 + tiff.c | 36 +- tools/PTAInterpolate.vcxproj | 233 + tools/PTOptimizer.vcxproj | 249 + tools/PTblender.vcxproj | 234 + tools/PTcrop.vcxproj | 233 + tools/PTinfo.vcxproj | 233 + tools/PTmasker.vcxproj | 233 + tools/PTmender.vcxproj | 233 + tools/PTroller.vcxproj | 233 + tools/PTtiff2psd.c | 19 +- tools/PTtiff2psd.vcxproj | 233 + tools/PTtiffdump.vcxproj | 233 + tools/PTuncrop.vcxproj | 233 + 49 files changed, 5134 insertions(+), 1304 deletions(-) panotools-cvs> diffs (truncated from 8602 to 500 lines): panotools-cvs> diff -r 20a9b820aba0 -r 0c73d8794377 CMakeLists.txt panotools-cvs> --- a/CMakeLists.txt Wed Jan 11 10:27:02 2012 +1100 panotools-cvs> +++ b/CMakeLists.txt Fri Mar 02 23:19:11 2012 +0000 panotools-cvs> @@ -173,6 +173,7 @@ f2c.h fftn.h rgbe.h panotools-cvs> + sys_compat.h sys_ansi.h sys_win.h ZComb.h panotools-cvs> diff -r 20a9b820aba0 -r 0c73d8794377 LocalDefs.props panotools-cvs> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 panotools-cvs> +++ b/LocalDefs.props Fri Mar 02 23:19:11 2012 +0000 panotools-cvs> @@ -0,0 +1,15 @@ panotools-cvs> +<?xml version="1.0" encoding="utf-8"?> panotools-cvs> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> panotools-cvs> + <PropertyGroup Label="UserMacros"> panotools-cvs> + <WXWIDGETS_HOME>D:\source\wxWidgets-2.8.10</WXWIDGETS_HOME> panotools-cvs> + </PropertyGroup> panotools-cvs> + <PropertyGroup> panotools-cvs> + <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion> panotools-cvs> + </PropertyGroup> panotools-cvs> + <ItemGroup> panotools-cvs> + <BuildMacro Include="WXWIDGETS_HOME"> panotools-cvs> + <Value>$(WXWIDGETS_HOME)</Value> panotools-cvs> + <EnvironmentVariable>true</EnvironmentVariable> panotools-cvs> + </BuildMacro> panotools-cvs> + </ItemGroup> panotools-cvs> +</Project> panotools-cvs> \ No newline at end of file panotools-cvs> diff -r 20a9b820aba0 -r 0c73d8794377 PTcommon.c panotools-cvs> --- a/PTcommon.c Wed Jan 11 10:27:02 2012 +1100 panotools-cvs> +++ b/PTcommon.c Fri Mar 02 23:19:11 2012 +0000 panotools-cvs> @@ -56,7 +56,7 @@ // Uncomment following line to enable testing of inverses in getROI panotools-cvs> -#define PANO_TEST_INVERSE panotools-cvs> +//#define PANO_TEST_INVERSE int panoFlattenTIFF(fullPath * fullPathImages, int counterImageFiles, panotools-cvs> @@ -89,6 +89,8 @@ fullPath tempFile; char tempString[128]; Image image; panotools-cvs> + Boolean bBig = FALSE; panotools-cvs> + assert(numberImages > 0); assert(fullPathImages != NULL); panotools-cvs> @@ -112,6 +114,9 @@ return -1; } panotools-cvs> + // Check to see if we need to create PSB instead of PSD file panotools-cvs> + if(image.height > 30000 || image.width > 30000 || flatteningParms->forceBig == 1) panotools-cvs> + bBig = TRUE; if (!(image.bitsPerPixel == 64 || image.bitsPerPixel == 32)) { PrintError("Image type not supported (%d bits per pixel)\n", panotools-cvs> @@ -119,29 +124,33 @@ return -1; } panotools-cvs> + // New versions of Photoshop can handle multilayer 16bit files panotools-cvs> + // Add an option to down sample to 8bit only if user request if (numberImages > 1 && image.bitsPerPixel != 32) { panotools-cvs> - if (image.bitsPerPixel == 64) { panotools-cvs> - PrintError panotools-cvs> - ("Panotools is not able to save 16bit PSD images. Downsampling to 8 bit"); panotools-cvs> + if (image.bitsPerPixel == 64 && flatteningParms->force8bit == 1) { panotools-cvs> + //PrintError panotools-cvs> + // ("Panotools is not able to save 16bit PSD images. Downsampling to 8 bit"); TwoToOneByte(&image); //we need to downsample to 8 bit if we are provided 16 bit images } } if (numberImages == 1) { panotools-cvs> - if (writePSD(&image, outputFileName) != 0) { panotools-cvs> - PrintError("Could not write PSD-file"); panotools-cvs> - if (ptQuietFlag != 0) panotools-cvs> - Progress(_disposeProgress, tempString); panotools-cvs> - return -1; panotools-cvs> - } panotools-cvs> - return 0; panotools-cvs> + if (writePS(&image, outputFileName, bBig) != 0) { panotools-cvs> + PrintError("Could not write PSD-file"); panotools-cvs> + if (ptQuietFlag != 0) panotools-cvs> + Progress(_disposeProgress, tempString); panotools-cvs> + return -1; panotools-cvs> + } panotools-cvs> + return 0; } ////////////////////////////////////////////////////////////////////// panotools-cvs> + //current algorithm is O(n2) which means it will take _forever_ to create panotools-cvs> + // a huge Photoshop files with many layers. //Write out the first image as the base layer in the PSD file panotools-cvs> - if (writePSDwithLayer(&image, outputFileName) != 0) { panotools-cvs> + if (writePSwithLayer(&image, outputFileName,bBig) != 0) { PrintError("Could not write PSD-file"); if (ptQuietFlag != 0) Progress(_disposeProgress, tempString); panotools-cvs> @@ -171,7 +180,7 @@ } // We can't process 16 bit TIFFs. We have to downsample to 8 bit if necessary panotools-cvs> - if (image.bitsPerPixel == 64) panotools-cvs> + if (image.bitsPerPixel == 64 && flatteningParms->force8bit == 1) TwoToOneByte(ptrImage); // Create a new file with the result PSD, then delete the current one panotools-cvs> @@ -190,10 +199,10 @@ stitchInfo.psdOpacity = (unsigned char) (255.0/ (i + 1)); else stitchInfo.psdOpacity = 255; panotools-cvs> - stitchInfo.psdBlendingMode = flatteningParms->psdBlendingMode; panotools-cvs> - if (addLayerToFile(ptrImage, outputFileName, &tempFile, &stitchInfo) panotools-cvs> - != 0) { panotools-cvs> + stitchInfo.psdBlendingMode = flatteningParms->psdBlendingMode; panotools-cvs> + panotools-cvs> + if (addLayerToFile(ptrImage, outputFileName, &tempFile, &stitchInfo) != 0) { PrintError("Could not write Panorama File"); return -1; } panotools-cvs> @@ -201,7 +210,7 @@ remove(outputFileName->name); rename(tempFile.name, outputFileName->name); panotools-cvs> - panoImageDispose(ptrImage); panotools-cvs> + panoImageDispose(ptrImage); } if (!ptQuietFlag) { panotools-cvs> @@ -300,7 +309,6 @@ if (right == 0) right = image->width; panotools-cvs> - if (image->bitsPerPixel == 32) { bytesPerPixel = 4; panotools-cvs> @@ -309,81 +317,80 @@ bytesPerPixel = 8; } else { panotools-cvs> - PrintError("Invalid bits per pixel in image %d", image->bitsPerPixel); panotools-cvs> + PrintError("Invalid bits per pixel in image %d", image->bitsPerPixel); exit(1); } if (image->format == _fisheye_circ || image->format == _thoby) { panotools-cvs> + // TODO panotools-cvs> + // This routine works only in fisheyes in portrait mode panotools-cvs> + // it probably fails in landscape mode panotools-cvs> + panotools-cvs> + int horCenter, verCenter; panotools-cvs> + int horRadious; panotools-cvs> + int horRadious2; panotools-cvs> - // TODO panotools-cvs> - // This routine works only in fisheyes in portrait mode panotools-cvs> - // it probably fails in landscape mode panotools-cvs> - panotools-cvs> - int horCenter, verCenter; panotools-cvs> - int horRadious; panotools-cvs> - int horRadious2; panotools-cvs> + horCenter = (left + right) / 2; panotools-cvs> + verCenter = (top + bottom) / 2; panotools-cvs> - horCenter = (left + right) / 2; panotools-cvs> - verCenter = (top + bottom) / 2; panotools-cvs> - panotools-cvs> - // Compute the horizontal width divided by 2, panotools-cvs> - // let us call it horizontal radios panotools-cvs> + // Compute the horizontal width divided by 2, panotools-cvs> + // let us call it horizontal radios panotools-cvs> - horRadious = (right - left) / 2; panotools-cvs> - // Square it, so we don't have to compute this panotools-cvs> - // every time panotools-cvs> - horRadious2 = horRadious * horRadious; panotools-cvs> - panotools-cvs> - dataPtr = *(image->data); panotools-cvs> - panotools-cvs> - // Scan the image from top to bottom panotools-cvs> - for (currentRow = 0; currentRow < image->height; currentRow++) { panotools-cvs> - int verDistance; panotools-cvs> - int verDistance2; panotools-cvs> + horRadious = (right - left) / 2; panotools-cvs> + // Square it, so we don't have to compute this panotools-cvs> + // every time panotools-cvs> + horRadious2 = horRadious * horRadious; panotools-cvs> - // The algorith it simple. Find the distance of each from from the panotools-cvs> - // center of the image. If the point is farther than horRadious panotools-cvs> - // then set mask to zero panotools-cvs> - panotools-cvs> - currentColumn = 0; panotools-cvs> - pixelPtr = dataPtr; panotools-cvs> - panotools-cvs> - // Compute the square of the vertical distance to this row from center panotools-cvs> - verDistance = (currentRow - verCenter); panotools-cvs> - verDistance2 = verDistance * verDistance; panotools-cvs> - panotools-cvs> - for (currentColumn = 0; currentColumn < image->width; currentColumn ++) { panotools-cvs> - int horDistance; panotools-cvs> - int horDistance2; panotools-cvs> + dataPtr = *(image->data); panotools-cvs> - // Compute square of distance of this point to center panotools-cvs> - // the old Pythagoras way panotools-cvs> - // distance^2 = horDistance^2 + verDistance^2 panotools-cvs> - panotools-cvs> - horDistance = (currentColumn - horCenter); panotools-cvs> - horDistance2 = horDistance * horDistance; panotools-cvs> - panotools-cvs> - if (horDistance2 + verDistance2 > horRadious2) { panotools-cvs> + // Scan the image from top to bottom panotools-cvs> + for (currentRow = 0; currentRow < image->height; currentRow++) { panotools-cvs> + int verDistance; panotools-cvs> + int verDistance2; panotools-cvs> - // Point falls outside the circle defined its horizontal maximum distance panotools-cvs> + // The algorith it simple. Find the distance of each from from the panotools-cvs> + // center of the image. If the point is farther than horRadious panotools-cvs> + // then set mask to zero panotools-cvs> - // Set mask to zero panotools-cvs> - if (bytesPerPixel == 4) panotools-cvs> - *pixelPtr = 0; panotools-cvs> - else if (bytesPerPixel == 8) { panotools-cvs> - *pixelPtr = 0; panotools-cvs> - *(pixelPtr+1) = 0; panotools-cvs> - } panotools-cvs> - panotools-cvs> - } panotools-cvs> - pixelPtr += bytesPerPixel; panotools-cvs> + currentColumn = 0; panotools-cvs> + pixelPtr = dataPtr; panotools-cvs> - } // for column panotools-cvs> - dataPtr += image->bytesPerLine; panotools-cvs> - } // for row panotools-cvs> - return; panotools-cvs> + // Compute the square of the vertical distance to this row from center panotools-cvs> + verDistance = (currentRow - verCenter); panotools-cvs> + verDistance2 = verDistance * verDistance; panotools-cvs> + panotools-cvs> + for (currentColumn = 0; currentColumn < image->width; currentColumn ++) { panotools-cvs> + int horDistance; panotools-cvs> + int horDistance2; panotools-cvs> + panotools-cvs> + // Compute square of distance of this point to center panotools-cvs> + // the old Pythagoras way panotools-cvs> + // distance^2 = horDistance^2 + verDistance^2 panotools-cvs> + panotools-cvs> + horDistance = (currentColumn - horCenter); panotools-cvs> + horDistance2 = horDistance * horDistance; panotools-cvs> + panotools-cvs> + if (horDistance2 + verDistance2 > horRadious2) { panotools-cvs> + panotools-cvs> + // Point falls outside the circle defined its horizontal maximum distance panotools-cvs> + panotools-cvs> + // Set mask to zero panotools-cvs> + if (bytesPerPixel == 4) panotools-cvs> + *pixelPtr = 0; panotools-cvs> + else if (bytesPerPixel == 8) { panotools-cvs> + *pixelPtr = 0; panotools-cvs> + *(pixelPtr+1) = 0; panotools-cvs> + } panotools-cvs> + panotools-cvs> + } panotools-cvs> + pixelPtr += bytesPerPixel; panotools-cvs> + panotools-cvs> + } // for column panotools-cvs> + dataPtr += image->bytesPerLine; panotools-cvs> + } // for row panotools-cvs> + return; } panotools-cvs> @@ -476,7 +483,7 @@ int x, y, x_jump; double x_d, y_d; // Cartesian Coordinates of point in source (i.e. input) image double Dx, Dy; // Coordinates of corresponding point in destination (i.e. output) image panotools-cvs> - double Dx2, Dy2; // Coordinates of corresponding point in destination (i.e. output) image panotools-cvs> + double Dx2, Dy2; // Coordinates of corresponding point in destination (i.e. output) image double w2 = (double) TrPtr->dest->width / 2.0 - 0.5; //half destination image width double h2 = (double) TrPtr->dest->height / 2.0 - 0.5; //half destination image height panotools-cvs> @@ -787,11 +794,11 @@ // and maps the pixels in these input images into the output image(s) for (loopCounter = 0; loopCounter < counterImageFiles; loopCounter++) { panotools-cvs> - // TODO panotools-cvs> - panotools-cvs> - // the original PTstitcher logic is strange panotools-cvs> + // TODO panotools-cvs> - // It processes a lot of data more than once. This part should really be done once for all images panotools-cvs> + // the original PTstitcher logic is strange panotools-cvs> + panotools-cvs> + // It processes a lot of data more than once. This part should really be done once for all images currentImagePtr = &image1; panotools-cvs> @@ -803,8 +810,8 @@ goto mainError; } panotools-cvs> - // printf("*********cut frame: should be zero for S and no crop %d\n", prefs->im.cP.cutFrame); panotools-cvs> - panotools-cvs> + // printf("*********cut frame: should be zero for S and no crop %d\n", prefs->im.cP.cutFrame); panotools-cvs> + //New for PTMender...PTMender uses "cropped" TIFFs as its intermediate file //format for all processing. In contrast, PTStitcher used full-size TIFF //images for all intermediate processing. PTMender can still write "uncropped" panotools-cvs> @@ -871,7 +878,7 @@ --tempString; /* nextWord does ++ before testing anything, this guarantess proper execution */ nextWord(output_file_format, &tempString); panotools-cvs> - if (strcmp(output_file_format, "TIFF_m") == 0 ) { panotools-cvs> + if (strcmp(output_file_format, "TIFF_m") == 0 ) { // CHeck if we are suppose to do cropped or uncropped croppedTIFFIntermediate = 1; if(strcmp(tempString, "") != 0) { panotools-cvs> @@ -894,8 +901,8 @@ croppedTIFFIntermediate = 0; } } else { panotools-cvs> - PrintError("No support for this ouput image format (%s). Output will be TIFF_m", output_file_format); panotools-cvs> - } panotools-cvs> + PrintError("No support for this ouput image format (%s). Output will be TIFF_m", output_file_format); panotools-cvs> + } // enable this to avoid cropped tiffs. usually for testing //croppedTIFFIntermediate = 0; panotools-cvs> @@ -919,14 +926,14 @@ goto mainError; } panotools-cvs> - // printf("Ended reading INPUT image\n"); panotools-cvs> + // printf("Ended reading INPUT image\n"); //This "masks" the input image so that some pixels are excluded from //transformation routine during pixel remapping/interpolation panotools-cvs> - panotools-cvs> + if (prefs->im.cP.cutFrame != 0) { // remove frame? 0 - no; 1 - yes panotools-cvs> - // THIS CODE is executed in crop C type only, but not in S type panotools-cvs> - // printf("To crop image\n"); panotools-cvs> + // THIS CODE is executed in crop C type only, but not in S type panotools-cvs> + // printf("To crop image\n"); if (CropImage(currentImagePtr, &(prefs->im.selection)) == 0) { prefs->im.selection.left = 0; prefs->im.selection.right = 0; panotools-cvs> @@ -977,9 +984,9 @@ panoMetadataResetSize(&metadata, resultPanorama.width, resultPanorama.height); panotools-cvs> - panotools-cvs> - metadata.imageNumber = loopCounter; panotools-cvs> - metadata.imageTotalNumber = counterImageFiles; panotools-cvs> + panotools-cvs> + metadata.imageNumber = loopCounter; panotools-cvs> + metadata.imageTotalNumber = counterImageFiles; metadata.imageDescription = strdup(regScript); panotools-cvs> @@ -1018,9 +1025,9 @@ resultPanorama.bytesPerLine = metadata.bytesPerLine; panoMetadataCopy(&resultPanorama.metadata, &metadata); panotools-cvs> - panotools-cvs> + panoMetadataFree(&metadata); panotools-cvs> - panotools-cvs> + //////End of set metadata panotools-cvs> @@ -1099,12 +1106,12 @@ image1.selection.left = prefs->im.selection.left; image1.selection.right = prefs->im.selection.right; panotools-cvs> - /* panotools-cvs> - printf("****** Image selection hfov %f, %d %d %d %d \n", image1.hfov, image1.selection.top, panotools-cvs> - image1.selection.bottom, panotools-cvs> - image1.selection.left, panotools-cvs> - image1.selection.right); panotools-cvs> - */ panotools-cvs> + /* panotools-cvs> + printf("****** Image selection hfov %f, %d %d %d %d \n", image1.hfov, image1.selection.top, panotools-cvs> + image1.selection.bottom, panotools-cvs> + image1.selection.left, panotools-cvs> + image1.selection.right); panotools-cvs> + */ CopyPosition(&resultPanorama, &(prefs->pano)); panotools-cvs> @@ -1130,14 +1137,14 @@ // Call the main pixel remapping routine...all the interpolation happens here panotools-cvs> - /* panotools-cvs> - printf("Prefs: %f\n", prefs->pano.hfov); panotools-cvs> - printf("Prefs im: hvof %f, yaw %f pitch %f, roll %f\n", prefs->im.hfov, prefs->im.yaw, prefs->im.pitch, prefs->im.roll); panotools-cvs> - printf("Prefs pano: hvof %f, vfov %f pitch %f, roll %f\n", prefs->pano.hfov, prefs->pano.yaw, prefs->pano.pitch, prefs->pano.roll); panotools-cvs> - printf("Prefs Interpolator %d:\n", prefs->interpolator); panotools-cvs> - printf("Prefs Gamma %d:\n", prefs->gamma); panotools-cvs> - printf("Prefs FastT %d:/n, prefs->fastStep); panotools-cvs> - */ panotools-cvs> + /* panotools-cvs> + printf("Prefs: %f\n", prefs->pano.hfov); panotools-cvs> + printf("Prefs im: hvof %f, yaw %f pitch %f, roll %f\n", prefs->im.hfov, prefs->im.yaw, prefs->im.pitch, prefs->im.roll); panotools-cvs> + printf("Prefs pano: hvof %f, vfov %f pitch %f, roll %f\n", prefs->pano.hfov, prefs->pano.yaw, prefs->pano.pitch, prefs->pano.roll); panotools-cvs> + printf("Prefs Interpolator %d:\n", prefs->interpolator); panotools-cvs> + printf("Prefs Gamma %d:\n", prefs->gamma); panotools-cvs> + printf("Prefs FastT %d:/n, prefs->fastStep); panotools-cvs> + */ MyMakePano(&transform, prefs, loopCounter); panotools-cvs> @@ -1200,25 +1207,25 @@ } panoTiffClose(tiffFile); panotools-cvs> - panotools-cvs> + #ifdef UNCROP_FISHEYES panotools-cvs> - if (croppedTIFFIntermediate == 0) { panotools-cvs> - // We can't process (yet) all files in cropped mode panotools-cvs> - // To quite the roar from the masses let them think we panotools-cvs> - // do. I wonder how long it will take for them to notice. Placebo effect? panotools-cvs> - pano_cropping_parms croppingParms; panotools-cvs> - bzero(&croppingParms, sizeof(croppingParms)); panotools-cvs> - panotools-cvs> - if (panoTiffCrop(currentFullPath.name, currentFullPath.name, &croppingParms) == 0) { panotools-cvs> - PrintError("Unable to write output file %s", currentFullPath.name); panotools-cvs> - remove(tempScriptFile.name); panotools-cvs> - return (-1); panotools-cvs> - } panotools-cvs> - } panotools-cvs> + if (croppedTIFFIntermediate == 0) { panotools-cvs> + // We can't process (yet) all files in cropped mode panotools-cvs> + // To quite the roar from the masses let them think we panotools-cvs> + // do. I wonder how long it will take for them to notice. Placebo effect? panotools-cvs> + pano_cropping_parms croppingParms; panotools-cvs> + bzero(&croppingParms, sizeof(croppingParms)); panotools-cvs> + panotools-cvs> + if (panoTiffCrop(currentFullPath.name, currentFullPath.name, &croppingParms) == 0) { panotools-cvs> + PrintError("Unable to write output file %s", currentFullPath.name); panotools-cvs> + remove(tempScriptFile.name); panotools-cvs> + return (-1); panotools-cvs> + } panotools-cvs> + } #endif ////////////////////////////////////////////////////////////////////// panotools-cvs> - panoImageDispose(&image1); panotools-cvs> + panoImageDispose(&image1); // The memory for td and ts was allocated in morpher.c with malloc // (not myMalloc), so we need to use free (not myFree) panotools-cvs> @@ -1231,7 +1238,7 @@ } free(prefs); panotools-cvs> - panoImageDispose(&resultPanorama); panotools-cvs> + panoImageDispose(&resultPanorama); } //End of main image processing loop panotools-cvs> @@ -1307,7 +1314,7 @@ if (ptQuietFlag == 0) Progress(_initProgress, "Writing Output Images"); panotools-cvs> - panotools-cvs> + for (loopCounter = 0; loopCounter < counterImageFiles; loopCounter++) { if (ptQuietFlag == 0) { panotools-cvs> @@ -1317,7 +1324,7 @@ return (1); } } panotools-cvs> - panotools-cvs> + strcpy(outputFileName, panoFileName->name); sprintf(var40, "%04d", loopCounter); strcat(outputFileName, var40); panotools-cvs> @@ -1328,17 +1335,15 @@ panotools-cvs> ------------------------------------------------------------------------------ panotools-cvs> Virtualization & Cloud Management Using Capacity Planning panotools-cvs> Cloud computing makes use of virtualization - but cloud computing panotools-cvs> also focuses on allowing computing to be delivered as a service. panotools-cvs> http://www.accelacomm.com/jaw/sfnl/114/51521223/ -- -- Daniel M. German http://turingmachine.org/ http://silvernegative.com/ dmg (at) uvic (dot) ca replace (at) with @ and (dot) with . |