
Thread
2008.12.17 20:54 "[Tiff] Deleting tags from a directory", by Frank Warmerdam
Folks,
I have a client who needs to be able to remove a colormap from an existing TIFF file. This reveals a problem that has vexed me a number of times before when trying to update TIFF files "in place". There does not appear to be any mechanism to delete a tag from an existing directory.
I propose, in libtiff4 to add a TIFFUnsetField() function which will remove a tag from the current directory if present. It would be implemented like this:
/*
* Clear the contents of the field in the internal structure.
*/
int
TIFFUnsetField(TIFF* tif, uint32 tag)
{
const TIFFField *fip = TIFFFieldWithTag(tif, tag);
TIFFDirectory* td = &tif->tif_dir;
if( !fip )
return 0;
if( fip->field_bit != FIELD_CUSTOM )
TIFFClrFieldBit(tif, fip->field_bit);
else
{
TIFFTagValue *tv;
int i;
for (i = 0; i < td->td_customValueCount; i++) {
tv = td->td_customValues + i;
if( tv->info->field_tag == tag )
break;
}
if( i < td->td_customValueCount )
{
_TIFFfree(tv->value);
for( ; i < td->td_customValueCount-1; i++) {
td->td_customValues[i] = td->td_customValues[i+1];
}
td->td_customValueCount--;
}
}
tif->tif_flags |= TIFF_DIRTYDIRECT;
return (1);
}
Does anyone know of any problems with this change? Is there already a way for applications to remove tags I'm not aware of? So far, I have only tested the above a wee bit. The following sample program demonstrates turning a paletted file into unpaletted form:
#include "tiffio.h"
int main()
{
TIFF *hTIFF;
hTIFF = TIFFOpen( "cm.tif", "r+" );
if( TIFFSetField( hTIFF, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK ) )
printf( "Set photometric successful.\n" );
else
printf( "Set photometric failed.\n" );
if( TIFFUnsetField( hTIFF, TIFFTAG_COLORMAP ) )
printf( "clear colormap successful.\n" );
else
printf( "clear colormap failed.\n" );
TIFFClose( hTIFF );
}
Best regards,
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam@pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent