blob: cb9010199765923247f0c8835385c320f9b37528 [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include "minitiff.h"
static void error(const char *msg)
{
fprintf(stderr, "%s\n", msg);
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
FILE *in_file, *out_file;
struct minitiff_info tiff_info;
unsigned int width, height, depth, y;
unsigned char *row;
if (argc <= 2)
error("Usage: tiff2pnm input.tif output.pnm");
in_file = fopen(argv[1], "rb");
if (in_file == NULL)
error("Can't open input (TIFF) file");
minitiff_init_info(&tiff_info);
minitiff_read_info(&tiff_info, in_file);
width = tiff_info.width;
height = tiff_info.height;
depth = tiff_info.samples_per_pixel;
if (width == 0 || height == 0)
error("Invalid TIFF dimensions");
if (depth != 1 && depth != 3)
error("Invalid number of color planes");
row = (unsigned char *)malloc(depth * width);
if (row == NULL)
error("Out of memory");
out_file = fopen(argv[2], "wb");
if (out_file == NULL)
error("Can't open output (PNM) file");
fprintf(out_file, "P%c\n%d %d\n255\n",
((depth == 1) ? '5' : '6'),
width, height);
for (y = 0; y < height; ++y)
{
minitiff_read_row(&tiff_info, row, y, in_file);
if (fwrite(row, depth, width, out_file) != width)
error("Can't write to output file");
}
minitiff_destroy_info(&tiff_info);
fclose(in_file);
fclose(out_file);
return EXIT_SUCCESS;
}