added -n flag

This commit is contained in:
Frank Warmerdam 2001-06-13 15:24:37 +00:00
parent 54eee39fba
commit f84737906e
2 changed files with 63 additions and 11 deletions

View File

@ -1,3 +1,9 @@
2001-06-13 Frank Warmerdam <warmerdam@pobox.com>
* tools/tiff2rgba.c: added -n flag to avoid emitting alpha component.
* man/tiff2rgba.1: new
2001-05-22 Frank Warmerdam <warmerdam@pobox.com>
* Added tiffset and tif_ojpeg to the dist lists in Makefile.in.

View File

@ -1,4 +1,4 @@
/* $Header: /cvs/maptools/cvsroot/libtiff/tools/tiff2rgba.c,v 1.3 1999-12-27 17:35:01 mwelles Exp $ */
/* $Header: /cvs/maptools/cvsroot/libtiff/tools/tiff2rgba.c,v 1.4 2001-06-13 15:24:37 warmerda Exp $ */
/*
* Copyright (c) 1991-1997 Sam Leffler
@ -42,6 +42,7 @@
uint16 compression = COMPRESSION_PACKBITS;
uint32 rowsperstrip = (uint32) -1;
int process_by_block = 0; /* default is whole image at once */
int no_alpha = 0;
static int tiffcvt(TIFF* in, TIFF* out);
@ -55,7 +56,7 @@ main(int argc, char* argv[])
extern int optind;
extern char *optarg;
while ((c = getopt(argc, argv, "c:r:t:b")) != -1)
while ((c = getopt(argc, argv, "c:r:t:b:n")) != -1)
switch (c) {
case 'b':
process_by_block = 1;
@ -70,6 +71,8 @@ main(int argc, char* argv[])
compression = COMPRESSION_LZW;
else if (streq(optarg, "jpeg"))
compression = COMPRESSION_JPEG;
else if (streq(optarg, "zip"))
compression = COMPRESSION_DEFLATE;
else
usage();
break;
@ -82,6 +85,10 @@ main(int argc, char* argv[])
rowsperstrip = atoi(optarg);
break;
case 'n':
no_alpha = 1;
break;
case '?':
usage();
/*NOTREACHED*/
@ -358,25 +365,53 @@ cvt_whole_image( TIFF *in, TIFF *out )
}
_TIFFfree( wrk_line );
/*
** Do we want to strip away alpha components?
*/
if( no_alpha )
{
int pixel_count = width * height;
unsigned char *src, *dst;
src = (unsigned char *) raster;
dst = (unsigned char *) raster;
while( pixel_count > 0 )
{
*(dst++) = *(src++);
*(dst++) = *(src++);
*(dst++) = *(src++);
src++;
pixel_count--;
}
}
/* Write out the result in strips */
for( row = 0; row < height; row += rowsperstrip )
{
uint32* raster_strip;
unsigned char * raster_strip;
int rows_to_write;
int bytes_per_pixel;
raster_strip = raster + row * width;
if( no_alpha )
{
raster_strip = ((unsigned char *) raster) + 3 * row * width;
bytes_per_pixel = 3;
}
else
{
raster_strip = (unsigned char *) (raster + row * width);
bytes_per_pixel = 4;
}
if( row + rowsperstrip > height )
rows_to_write = height - row;
else
rows_to_write = rowsperstrip;
if( TIFFWriteEncodedStrip( out, row / rowsperstrip,
raster_strip,
4 * rows_to_write * width ) == -1 )
if( TIFFWriteEncodedStrip( out, row / rowsperstrip, raster_strip,
bytes_per_pixel * rows_to_write * width ) == -1 )
{
_TIFFfree( raster );
return 0;
@ -411,9 +446,18 @@ tiffcvt(TIFF* in, TIFF* out)
CopyField(TIFFTAG_FILLORDER, shortv);
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 4);
v[0] = EXTRASAMPLE_ASSOCALPHA;
TIFFSetField(out, TIFFTAG_EXTRASAMPLES, 1, v);
if( no_alpha )
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3);
else
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 4);
if( !no_alpha )
{
v[0] = EXTRASAMPLE_ASSOCALPHA;
TIFFSetField(out, TIFFTAG_EXTRASAMPLES, 1, v);
}
CopyField(TIFFTAG_XRESOLUTION, floatv);
CopyField(TIFFTAG_YRESOLUTION, floatv);
CopyField(TIFFTAG_RESOLUTIONUNIT, shortv);
@ -433,6 +477,7 @@ static char* usageMsg[] = {
"usage: tiff2rgba [-c comp] [-r rows] [-b] input... output\n",
"where comp is one of the following compression algorithms:\n",
" jpeg\t\tJPEG encoding\n",
" zip\t\tLempel-Ziv & Welch encoding\n",
" lzw\t\tLempel-Ziv & Welch encoding\n",
" (lzw compression unsupported by default due to Unisys patent enforcement)\n",
" packbits\tPackBits encoding\n",
@ -440,6 +485,7 @@ static char* usageMsg[] = {
"and the other options are:\n",
" -r\trows/strip\n",
" -b (progress by block rather than as a whole image)\n",
" -n don't emit alpha component.\n",
NULL
};