Re: [panotools-cvs] /hgroot/panotools/libpano: merged PSD branch
D M German <
dmg@...>
2012-03-05 19:07:51 GMT
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 <bruno <at> postle.net>
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> <at> <at> -173,6 +173,7 <at> <at>
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> <at> <at> -0,0 +1,15 <at> <at>
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> <at> <at> -56,7 +56,7 <at> <at>
// 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> <at> <at> -89,6 +89,8 <at> <at>
fullPath tempFile;
char tempString[128];
Image image;
panotools-cvs> + Boolean bBig = FALSE;
panotools-cvs> +
assert(numberImages > 0);
assert(fullPathImages != NULL);
panotools-cvs> <at> <at> -112,6 +114,9 <at> <at>
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> <at> <at> -119,29 +124,33 <at> <at>
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> <at> <at> -171,7 +180,7 <at> <at>
}
// 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> <at> <at> -190,10 +199,10 <at> <at>
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> <at> <at> -201,7 +210,7 <at> <at>
remove(outputFileName->name);
rename(tempFile.name, outputFileName->name);
panotools-cvs> - panoImageDispose(ptrImage);
panotools-cvs> + panoImageDispose(ptrImage);
}
if (!ptQuietFlag) {
panotools-cvs> <at> <at> -300,7 +309,6 <at> <at>
if (right == 0)
right = image->width;
panotools-cvs> -
if (image->bitsPerPixel == 32) {
bytesPerPixel = 4;
panotools-cvs> <at> <at> -309,81 +317,80 <at> <at>
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> <at> <at> -476,7 +483,7 <at> <at>
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> <at> <at> -787,11 +794,11 <at> <at>
// 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> <at> <at> -803,8 +810,8 <at> <at>
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> <at> <at> -871,7 +878,7 <at> <at>
--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> <at> <at> -894,8 +901,8 <at> <at>
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> <at> <at> -919,14 +926,14 <at> <at>
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> <at> <at> -977,9 +984,9 <at> <at>
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> <at> <at> -1018,9 +1025,9 <at> <at>
resultPanorama.bytesPerLine = metadata.bytesPerLine;
panoMetadataCopy(&resultPanorama.metadata, &metadata);
panotools-cvs> -
panotools-cvs> +
panoMetadataFree(&metadata);
panotools-cvs> -
panotools-cvs> +
//////End of set metadata
panotools-cvs> <at> <at> -1099,12 +1106,12 <at> <at>
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> <at> <at> -1130,14 +1137,14 <at> <at>
// 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> <at> <at> -1200,25 +1207,25 <at> <at>
}
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> <at> <at> -1231,7 +1238,7 <at> <at>
}
free(prefs);
panotools-cvs> - panoImageDispose(&resultPanorama);
panotools-cvs> + panoImageDispose(&resultPanorama);
} //End of main image processing loop
panotools-cvs> <at> <at> -1307,7 +1314,7 <at> <at>
if (ptQuietFlag == 0)
Progress(_initProgress, "Writing Output Images");
panotools-cvs> -
panotools-cvs> +
for (loopCounter = 0; loopCounter < counterImageFiles; loopCounter++) {
if (ptQuietFlag == 0) {
panotools-cvs> <at> <at> -1317,7 +1324,7 <at> <at>
return (1);
}
}
panotools-cvs> -
panotools-cvs> +
strcpy(outputFileName, panoFileName->name);
sprintf(var40, "%04d", loopCounter);
strcat(outputFileName, var40);
panotools-cvs> <at> <at> -1328,17 +1335,15 <at> <at>
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 <at> and (dot) with .
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
PanoTools-devel mailing list
PanoTools-devel <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/panotools-devel