2012.08.16 19:45 "[Tiff] Is it possible to create tags in tree structure?", by Yimin Li
Hi everyone,
I am here for the first time! Thanks for help from Frank Warmerdam!
I am trying to create tags in tree structure, using libtiff. The idea is to
make a TIFFTAG_SUBIFD in sub-directory. But seems nested SUBIFDs are not
allowed. Is this direction correct? Please let me know if I am wrong.
I created a test case to start working with. It could help if people don't
want to create another one. ;) Please find it in attached file. Thank you!
Kind regards,
Yimin
#include <stdlib.h>
#include "tiffiop.h"
#define TEST_TAG 0x1111
static TIFFField Test_Fiels[] = {
{ TEST_TAG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16, TIFF_SETGET_UNDEFINED, FIELD_CUSTOM, 0, 0, "Test tag", NULL },
};
static TIFFFieldArray Test_FieldArray = { tfiatOther, 0, TIFFArrayCount(Test_Fiels), Test_Fiels };
int main( int argc, char* argv[] ) {
TIFF *tif;
if( ( tif = TIFFOpen( "output.tif", "w" ) ) == NULL )
return -1;
TIFFSetField( tif, TIFFTAG_IMAGEWIDTH, 1 ); // required by a basic tif file
TIFFSetField( tif, TIFFTAG_IMAGELENGTH, 1 ); //
TIFFWriteEncodedStrip( tif, 0, NULL, 0 ); //
if( !TIFFWriteDirectory( tif ) )
return -1;
uint64 customDirectory_L0[2] = { 0, 0 };
uint64 customDirectory_L1[1] = { 0 };
if( TIFFCreateCustomDirectory( tif, &Test_FieldArray ) )
return -1;
if( !TIFFSetField( tif, TEST_TAG, 1 ) )
return -1;
if( !TIFFWriteCustomDirectory( tif, &customDirectory_L0[0] ) )
return -1;
if( TIFFCreateCustomDirectory( tif, &Test_FieldArray ) )
return -1;
if( !TIFFSetField(tif, TEST_TAG, 2) )
return -1;
if( !TIFFWriteCustomDirectory( tif, &customDirectory_L0[1] ) )
return -1;
TIFFSetDirectory( tif, 0 );
TIFFSetField( tif, TIFFTAG_SUBIFD, 2, customDirectory_L0 );
TIFFWriteDirectory( tif );
if( TIFFCreateCustomDirectory( tif, &Test_FieldArray ) )
return -1;
if( !TIFFSetField( tif, TEST_TAG, 3 ) )
return -1;
if( !TIFFWriteCustomDirectory( tif, &customDirectory_L1[0] ) )
return -1;
TIFFSetSubDirectory( tif, customDirectory_L0[0] );
if( !TIFFSetField( tif, TIFFTAG_SUBIFD, 1, customDirectory_L1 ) ) // info from console: _TIFFVSetField: output.tif: Sorry, cannot nest SubIFDs.
return -1;
TIFFClose( tif );
printf("Done.\n");
return 0;
}