AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
November 2004

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



2004.11.05 17:17 "Append and read subifd", by Julien Demaria

Hi,

I try to append and read subifds to the first directory of an existing tiff 
file (little code in attachment) and it doesn't work with the current 
libtiff CVS (Linux).

Thanks in advance,

Julien

#include "tiff.h"
#include "tiffio.h"

int main(int argc, char **argv) {
    char *fout = argv[1];
    TIFF *tif, *tifr;
    unsigned char buf[24] = {0}, buf2[24] = {0};
    uint16 nb_ifds = 2, nb_ifds_read = 0;
    uint32 *offsets_ifds = NULL, *offsets_ifds_read = NULL;

    buf[0] = 22;
    buf[1] = 44;
    buf[2] = 55;

    tif = TIFFOpen(fout, "w");
    TIFFSetField( tif, TIFFTAG_BITSPERSAMPLE, 8 );
    TIFFSetField( tif, TIFFTAG_SAMPLESPERPIXEL, 1 );
    TIFFSetField( tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK );
    TIFFSetField( tif, TIFFTAG_IMAGEWIDTH, 4 );
    TIFFSetField( tif, TIFFTAG_IMAGELENGTH, 6 );
    TIFFSetField( tif, TIFFTAG_ROWSPERSTRIP, 6 );
    TIFFSetField( tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG );
    TIFFWriteEncodedStrip(tif, 0, buf, 24);
    TIFFClose(tif);

    tif = TIFFOpen(fout, "a");
    TIFFSetDirectory(tif, 0);
    offsets_ifds = (uint32 *) malloc(nb_ifds * sizeof(uint32));
    offsets_ifds[0] = 0;
    offsets_ifds[1] = 0;
    TIFFSetField(tif, TIFFTAG_SUBIFD, nb_ifds, offsets_ifds);
    TIFFRewriteDirectory(tif);

    TIFFSetField( tif, TIFFTAG_BITSPERSAMPLE, 8 );
    TIFFSetField( tif, TIFFTAG_SAMPLESPERPIXEL, 1 );
    TIFFSetField( tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK );
    TIFFSetField( tif, TIFFTAG_IMAGEWIDTH, 2 );
    TIFFSetField( tif, TIFFTAG_IMAGELENGTH, 3 );
    TIFFSetField( tif, TIFFTAG_ROWSPERSTRIP, 3 );
    TIFFSetField( tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG );
    TIFFWriteEncodedStrip(tif, 0, buf, 6);
    TIFFWriteDirectory(tif);

    tifr = TIFFOpen(fout, "r");
    if (!TIFFGetField(tifr, TIFFTAG_SUBIFD, &nb_ifds_read,
    &offsets_ifds_read))
 	printf("error\n");
    else {
	printf("%d %d\n", offsets_ifds_read[0], offsets_ifds_read[1]);
	TIFFSetSubDirectory(tifr, offsets_ifds_read[0]);
    }
    TIFFSetField( tif, TIFFTAG_BITSPERSAMPLE, 8 );
    TIFFSetField( tif, TIFFTAG_SAMPLESPERPIXEL, 1 );
    TIFFSetField( tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK );
    TIFFSetField( tif, TIFFTAG_IMAGEWIDTH, 1 );
    TIFFSetField( tif, TIFFTAG_IMAGELENGTH, 1 );
    TIFFSetField( tif, TIFFTAG_ROWSPERSTRIP, 1 );
    TIFFSetField( tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG );
    TIFFReadEncodedStrip(tifr, 0, buf2, 6);
    TIFFWriteEncodedStrip(tif, 0, buf, 1);
    TIFFClose(tifr);
    TIFFClose(tif);

    return 0;
}