2003.12.26 11:51 "Re: [Tiff] writing custom tags with TIFFSetField", by Andrey Kiselev
I am trying to update tiffcp to read and write a custom tag (Wang Annotations). Well, in the newest CVS it looks like TIFFGetField might be finally able to acquire the custom tag data. But when I try and write it using TIFFSetField it seems to be getting written to a different tag number than what was specified on the tag line. Beyond that, I can't figure out how writing to the TIFFTagValue that is specified in the default section of _TIFFVSetField actually writes to the new tiff directory. Has anyone seen any examples of reading and writing to custom tags using the new interface in 3.6.X?
Carl,
It is a bit tricky to modify tiffcp to enable custom tags copying. I'm recommend ti fill the feature request and shall try to implement such a feature in the next libtiff release.
I have attached an example code which shows how you can copy your tag.
Regards,
Andrey
Andrey V. Kiselev
Home phone: +7 812 5274898 ICQ# 26871517
#include <tiffio.h>
#include <stdio.h>
#define TIFFTAG_WANG 32932
static void TagExtender(TIFF *tiff)
{
static const TIFFFieldInfo xtiffFieldInfo[] = {
{ TIFFTAG_WANG, -1, -1, TIFF_BYTE, FIELD_CUSTOM, 1, 0, "Wang" }
};
TIFFMergeFieldInfo(tiff, xtiffFieldInfo,
sizeof(xtiffFieldInfo) / sizeof(xtiffFieldInfo[0]));
}
int main(int argc, char **argv)
{
TIFF *in, *out;
char *buf, *wang;
int i, count;
if (argc < 3)
{
fprintf(stderr, "Usage: %s in.tiff out.tiff\n", argv[0]);
return 0;
}
/* Register the custom tag hadler */
TIFFSetTagExtender(TagExtender);
in = TIFFOpen(argv[1], "r");
if (!in)
{
fprintf(stderr, "Can't open input file %s\n", argv[1]);
return 1;
}
TIFFGetField(in, TIFFTAG_WANG, &count, &wang);
out = TIFFOpen(argv[2], "w");
if (!out)
{
fprintf(stderr, "Can't open output file %s\n", argv[2]);
TIFFClose(in);
return 2;
}
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, 256);
TIFFSetField(out, TIFFTAG_IMAGELENGTH, 256);
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8);
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 3);
TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
TIFFSetField(out, TIFFTAG_WANG, count, wang);
buf = _TIFFmalloc(3 * 256 * 256);
TIFFWriteEncodedStrip(out, 0, buf, 3 * 256 * 256);
_TIFFfree(buf);
TIFFClose(out);
TIFFClose(in);
return 0;
}