Blame exrmakepreview/main.cpp

Packit Service 6754ca
///////////////////////////////////////////////////////////////////////////
Packit Service 6754ca
//
Packit Service 6754ca
// Copyright (c) 2004, Industrial Light & Magic, a division of Lucas
Packit Service 6754ca
// Digital Ltd. LLC
Packit Service 6754ca
// 
Packit Service 6754ca
// All rights reserved.
Packit Service 6754ca
// 
Packit Service 6754ca
// Redistribution and use in source and binary forms, with or without
Packit Service 6754ca
// modification, are permitted provided that the following conditions are
Packit Service 6754ca
// met:
Packit Service 6754ca
// *       Redistributions of source code must retain the above copyright
Packit Service 6754ca
// notice, this list of conditions and the following disclaimer.
Packit Service 6754ca
// *       Redistributions in binary form must reproduce the above
Packit Service 6754ca
// copyright notice, this list of conditions and the following disclaimer
Packit Service 6754ca
// in the documentation and/or other materials provided with the
Packit Service 6754ca
// distribution.
Packit Service 6754ca
// *       Neither the name of Industrial Light & Magic nor the names of
Packit Service 6754ca
// its contributors may be used to endorse or promote products derived
Packit Service 6754ca
// from this software without specific prior written permission. 
Packit Service 6754ca
// 
Packit Service 6754ca
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 6754ca
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 6754ca
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit Service 6754ca
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 6754ca
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit Service 6754ca
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit Service 6754ca
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit Service 6754ca
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit Service 6754ca
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit Service 6754ca
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit Service 6754ca
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 6754ca
//
Packit Service 6754ca
///////////////////////////////////////////////////////////////////////////
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
//-----------------------------------------------------------------------------
Packit Service 6754ca
//
Packit Service 6754ca
//	exrmakepreview -- a program that inserts a
Packit Service 6754ca
//	preview image into an OpenEXR file's header.
Packit Service 6754ca
//
Packit Service 6754ca
//-----------------------------------------------------------------------------
Packit Service 6754ca
Packit Service 6754ca
#include "makePreview.h"
Packit Service 6754ca
Packit Service 6754ca
#include <iostream>
Packit Service 6754ca
#include <exception>
Packit Service 6754ca
#include <stdlib.h>
Packit Service 6754ca
#include <string.h>
Packit Service 6754ca
Packit Service 6754ca
using namespace std;
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
void
Packit Service 6754ca
usageMessage (const char argv0[], bool verbose = false)
Packit Service 6754ca
{
Packit Service 6754ca
    cerr << "usage: " << argv0 << " [options] infile outfile" << endl;
Packit Service 6754ca
Packit Service 6754ca
    if (verbose)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "\n"
Packit Service 6754ca
		"Reads an OpenEXR image from infile, generates a preview\n"
Packit Service 6754ca
		"image, adds it to the image's header, and saves the result\n"
Packit Service 6754ca
		"in outfile.  Infile and outfile must not refer to the same\n"
Packit Service 6754ca
		"file (the program cannot edit an image file \"in place\").\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"Options:\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"-w x      sets the width of the preview image to x pixels\n"
Packit Service 6754ca
		"          (default is 100)\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"-e s      adjusts the preview image's exposure by s f-stops\n"
Packit Service 6754ca
		"          (default is 0).  Positive values make the image\n"
Packit Service 6754ca
		"          brighter, negative values make it darker.\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"-v        verbose mode\n"
Packit Service 6754ca
		"\n"
Packit Service 6754ca
		"-h        prints this message\n";
Packit Service 6754ca
Packit Service 6754ca
	 cerr << endl;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    exit (1);
Packit Service 6754ca
}
Packit Service 6754ca
Packit Service 6754ca
Packit Service 6754ca
int
Packit Service 6754ca
main(int argc, char **argv)
Packit Service 6754ca
{
Packit Service 6754ca
    const char *inFile = 0;
Packit Service 6754ca
    const char *outFile = 0;
Packit Service 6754ca
    int previewWidth = 100;
Packit Service 6754ca
    float exposure = 0;
Packit Service 6754ca
    bool verbose = false;
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Parse the command line.
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    if (argc < 2)
Packit Service 6754ca
	usageMessage (argv[0], true);
Packit Service 6754ca
Packit Service 6754ca
    int i = 1;
Packit Service 6754ca
Packit Service 6754ca
    while (i < argc)
Packit Service 6754ca
    {
Packit Service 6754ca
	if (!strcmp (argv[i], "-w"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Set preview image width
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    if (i > argc - 2)
Packit Service 6754ca
		usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
	    previewWidth = strtol (argv[i + 1], 0, 0);
Packit Service 6754ca
	    i += 2;
Packit Service 6754ca
	}
Packit Service 6754ca
	else if (!strcmp (argv[i], "-e"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Set preview image width
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    if (i > argc - 2)
Packit Service 6754ca
		usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
	    exposure = strtod (argv[i + 1], 0);
Packit Service 6754ca
	    i += 2;
Packit Service 6754ca
	}
Packit Service 6754ca
	else if (!strcmp (argv[i], "-v"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Verbose mode
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    verbose = true;
Packit Service 6754ca
	    i += 1;
Packit Service 6754ca
	}
Packit Service 6754ca
	else if (!strcmp (argv[i], "-h"))
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Print help message
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    usageMessage (argv[0], true);
Packit Service 6754ca
	}
Packit Service 6754ca
	else
Packit Service 6754ca
	{
Packit Service 6754ca
	    //
Packit Service 6754ca
	    // Image file name
Packit Service 6754ca
	    //
Packit Service 6754ca
Packit Service 6754ca
	    if (inFile == 0)
Packit Service 6754ca
		inFile = argv[i];
Packit Service 6754ca
	    else
Packit Service 6754ca
		outFile = argv[i];
Packit Service 6754ca
Packit Service 6754ca
	    i += 1;
Packit Service 6754ca
	}
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    if (inFile == 0 || outFile == 0)
Packit Service 6754ca
	usageMessage (argv[0]);
Packit Service 6754ca
Packit Service 6754ca
    if (!strcmp (inFile, outFile))
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "Input and output cannot be the same file." << endl;
Packit Service 6754ca
	return 1;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    if (previewWidth <= 0)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << "Preview image width must be greather than zero." << endl;
Packit Service 6754ca
	return 1;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    //
Packit Service 6754ca
    // Load inFile, add a preview image, and save the result in outFile.
Packit Service 6754ca
    //
Packit Service 6754ca
Packit Service 6754ca
    int exitStatus = 0;
Packit Service 6754ca
Packit Service 6754ca
    try
Packit Service 6754ca
    {
Packit Service 6754ca
	makePreview (inFile, outFile, previewWidth, exposure, verbose);
Packit Service 6754ca
    }
Packit Service 6754ca
    catch (const exception &e)
Packit Service 6754ca
    {
Packit Service 6754ca
	cerr << e.what() << endl;
Packit Service 6754ca
	exitStatus = 1;
Packit Service 6754ca
    }
Packit Service 6754ca
Packit Service 6754ca
    return exitStatus;
Packit Service 6754ca
}