AWARE SYSTEMS
TIFF and LibTiff Mail List Archive

Thread

2003.07.28 23:29 "[Tiff] extended tags", by Tiglao, Percy
2003.07.29 01:06 "[Tiff] extended tags", by Chris Cox
2003.07.30 12:24 "[Tiff] extended tags", by Andrey Kiselev
2003.07.31 12:48 "[Tiff] RE: Tiff digest, Vol 1 #5 - 1 msg", by Tiglao, Percy
2003.08.03 07:23 "[Tiff] RE: Tiff digest, Vol 1 #5 - 1 msg", by Andrey Kiselev
2003.09.25 10:45 "[Tiff] Extended rational tag.", by David Christopher

2003.09.25 10:45 "[Tiff] Extended rational tag.", by David Christopher

Hi,

I'm new to libtiff and have been trying to read values from an extended rational tag in a variant of a tiff file. I've used Niles' code for this and replaced his example tags with my own. However the values that I'm getting when I try to read the tag are nonsense. However, TIFFGetField doesn't return 0 so it suggests that it can find the tag ok. Hence I guess I haven't declared the correct data types in places.

I've copied the parts of the code that I've changed below. Can anybody tell me what I've done wrong?!

Regards

Dave Christopher

// from tif_dir.c

static const TIFFFieldInfo xtiffFieldInfo[] = {

  /* XXX Replace these example tags with your own
extended tags */
    { TIFFTAG_UIC3_STKINFO, -1, -1, TIFF_RATIONAL,
FIELD_UIC3_STKINFO, TRUE, TRUE, "UIC3STKTag" },
};

static int
_XTIFFVSetField(TIFF* tif, ttag_t tag, va_list ap)
{
        xtiff *xt = XTIFFDIR(tif);
        XTIFFDirectory* xd = &xt->xtif_dir;
        int status = 1;
        uint32 v32=0;
        int i=0, v=0;
        va_list ap1 = ap;

        /* va_start is called by the calling routine */

        switch (tag)
        {
                /*
                 * XXX put your extended tags here;
replace the implemented
                 * example tags with your own.
                 */
    case TIFFTAG_UIC3_STKINFO:
                xd->xd_uic3_stkinfo_size = (uint32) va_arg(ap,
uint32);
/ *** in the long array here I've passed two * size as
I think size is the number of rationals, but I want
twice this number for the long array? *****/
                _TIFFsetLongArray( &xd->tag3_extra, (uint32*)
va_arg(ap, uint32*), (long) 2*xd->xd_uic3_stkinfo_size
);
                break;
        default:
                /* call the inherited method */
                return (PARENT(xt,vsetfield))(tif,tag,ap);
                break;
        }
        if (status) {

                /* we have to override the print method here,
                 * after the compression tags have gotten to it.
                 * This makes sense because the only time we would
                 * need the extended print method is if an extended
                 * tag is set by the reader.
                 */

                if (!(xt->xtif_flags & XTIFFP_PRINT))
                {
                        PARENT(xt,printdir) =
TIFFMEMBER(tif,printdir);
                        TIFFMEMBER(tif,printdir) =
_XTIFFPrintDirectory;
                        xt->xtif_flags |= XTIFFP_PRINT;
                }
                TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif,
tag)->field_bit);
                tif->tif_flags |= TIFF_DIRTYDIRECT;
        }
        va_end(ap);
        return (status);
}

static int
_XTIFFVGetField(TIFF* tif, ttag_t tag, va_list ap)
{
        xtiff *xt = XTIFFDIR(tif);
        XTIFFDirectory* xd = &xt->xtif_dir;

        switch (tag) {
                /*
                 * XXX put your extended tags here;
replace the implemented
                 * example tags with your own.
                 */
    case TIFFTAG_UIC3_STKINFO:

            *va_arg(ap, uint32*) = xd->xd_uic3_stkinfo_size;

                   *va_arg(ap, uint32**) = xd->tag3_extra;

                break;
        default:
                /* return inherited method */
                return (PARENT(xt,vgetfield))(tif,tag,ap);
                break;
        }
        return (1);
}

/// From tiffiop.h
/* XXX - Define number of your extended tags here */
#define NUM_XFIELD 1
#define XFIELD_BASE (FIELD_LAST-NUM_XFIELD)

/* XXX - Define your Tag Fields here */
#define FIELD_UIC3_STKINFO (XFIELD_BASE+0)

/* XXX - Define Private directory tag structure here
*/
struct XTIFFDirectory
{
        uint32 xd_uic3_stkinfo_size;
 uint32* tag3_extra;
};
typedef struct XTIFFDirectory XTIFFDirectory;

________________________________________________________________________ Want to chat instantly with your online friends? Get the FREE Yahoo! Messenger http://mail.messenger.yahoo.co.uk