2003.12.24 18:04 "[Tiff] writing custom tags with TIFFSetField", by Carl Collin

2003.12.26 19:17 "Re: [Tiff] CopyTag error again...", by Andrey Kiselev

Hey Andrey, thank for taking a look at this... but now...

Now I get the simple error that it could not write that tag... I have attached the file in question as a zip file, just unzip. Can you check it out?

This is the error.

Carl2.tif: Error writing data for field "Wang".

Sorry again... Another small mistake :-) There are a patch (to clear out what changed) and corrected file itself.

--- copytag.c.bak       Fri Dec 26 22:12:56 2003
+++ copytag.c   Fri Dec 26 22:14:09 2003
@@ -17,7 +17,8 @@
 {
     TIFF    *in, *out;
     char    *buf, *wang;
-    int     i, count;
+    int     i;
+    short   count;

     if (argc < 3)
     {
@@ -36,6 +37,7 @@
     }

     TIFFGetField(in, TIFFTAG_WANG, &count, &wang);
+    fprintf(stdout, "Wang tag length: %d\n", count);

     out = TIFFOpen(argv[2], "w");
     if (!out)

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,   0,  1,  "Wang" }
    };

    TIFFMergeFieldInfo(tiff, xtiffFieldInfo,
                       sizeof(xtiffFieldInfo) / sizeof(xtiffFieldInfo[0]));
}

int main(int argc, char **argv)
{
    TIFF    *in, *out;
    char    *buf, *wang;
    int     i;
    short   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);
    fprintf(stdout, "Wang tag length: %d\n", count);

    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;
}