📄 tif_dir.c
字号:
break;
case TIFFTAG_BITSPERSAMPLE:
*va_arg(ap, uint16*) = td->td_bitspersample;
break;
case TIFFTAG_COMPRESSION:
*va_arg(ap, uint16*) = td->td_compression;
break;
case TIFFTAG_PHOTOMETRIC:
*va_arg(ap, uint16*) = td->td_photometric;
break;
case TIFFTAG_THRESHHOLDING:
*va_arg(ap, uint16*) = td->td_threshholding;
break;
case TIFFTAG_FILLORDER:
*va_arg(ap, uint16*) = td->td_fillorder;
break;
case TIFFTAG_DOCUMENTNAME:
*va_arg(ap, char**) = td->td_documentname;
break;
case TIFFTAG_ARTIST:
*va_arg(ap, char**) = td->td_artist;
break;
case TIFFTAG_DATETIME:
*va_arg(ap, char**) = td->td_datetime;
break;
case TIFFTAG_HOSTCOMPUTER:
*va_arg(ap, char**) = td->td_hostcomputer;
break;
case TIFFTAG_IMAGEDESCRIPTION:
*va_arg(ap, char**) = td->td_imagedescription;
break;
case TIFFTAG_MAKE:
*va_arg(ap, char**) = td->td_make;
break;
case TIFFTAG_MODEL:
*va_arg(ap, char**) = td->td_model;
break;
case TIFFTAG_COPYRIGHT:
*va_arg(ap, char**) = td->td_copyright;
break;
case TIFFTAG_ORIENTATION:
*va_arg(ap, uint16*) = td->td_orientation;
break;
case TIFFTAG_SAMPLESPERPIXEL:
*va_arg(ap, uint16*) = td->td_samplesperpixel;
break;
case TIFFTAG_ROWSPERSTRIP:
*va_arg(ap, uint32*) = td->td_rowsperstrip;
break;
case TIFFTAG_MINSAMPLEVALUE:
*va_arg(ap, uint16*) = td->td_minsamplevalue;
break;
case TIFFTAG_MAXSAMPLEVALUE:
*va_arg(ap, uint16*) = td->td_maxsamplevalue;
break;
case TIFFTAG_SMINSAMPLEVALUE:
*va_arg(ap, double*) = td->td_sminsamplevalue;
break;
case TIFFTAG_SMAXSAMPLEVALUE:
*va_arg(ap, double*) = td->td_smaxsamplevalue;
break;
case TIFFTAG_XRESOLUTION:
*va_arg(ap, float*) = td->td_xresolution;
break;
case TIFFTAG_YRESOLUTION:
*va_arg(ap, float*) = td->td_yresolution;
break;
case TIFFTAG_PLANARCONFIG:
*va_arg(ap, uint16*) = td->td_planarconfig;
break;
case TIFFTAG_XPOSITION:
*va_arg(ap, float*) = td->td_xposition;
break;
case TIFFTAG_YPOSITION:
*va_arg(ap, float*) = td->td_yposition;
break;
case TIFFTAG_PAGENAME:
*va_arg(ap, char**) = td->td_pagename;
break;
case TIFFTAG_RESOLUTIONUNIT:
*va_arg(ap, uint16*) = td->td_resolutionunit;
break;
case TIFFTAG_PAGENUMBER:
*va_arg(ap, uint16*) = td->td_pagenumber[0];
*va_arg(ap, uint16*) = td->td_pagenumber[1];
break;
case TIFFTAG_HALFTONEHINTS:
*va_arg(ap, uint16*) = td->td_halftonehints[0];
*va_arg(ap, uint16*) = td->td_halftonehints[1];
break;
case TIFFTAG_COLORMAP:
*va_arg(ap, uint16**) = td->td_colormap[0];
*va_arg(ap, uint16**) = td->td_colormap[1];
*va_arg(ap, uint16**) = td->td_colormap[2];
break;
case TIFFTAG_STRIPOFFSETS:
case TIFFTAG_TILEOFFSETS:
*va_arg(ap, uint32**) = td->td_stripoffset;
break;
case TIFFTAG_STRIPBYTECOUNTS:
case TIFFTAG_TILEBYTECOUNTS:
*va_arg(ap, uint32**) = td->td_stripbytecount;
break;
case TIFFTAG_MATTEING:
*va_arg(ap, uint16*) =
(td->td_extrasamples == 1 &&
td->td_sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA);
break;
case TIFFTAG_EXTRASAMPLES:
*va_arg(ap, uint16*) = td->td_extrasamples;
*va_arg(ap, uint16**) = td->td_sampleinfo;
break;
case TIFFTAG_TILEWIDTH:
*va_arg(ap, uint32*) = td->td_tilewidth;
break;
case TIFFTAG_TILELENGTH:
*va_arg(ap, uint32*) = td->td_tilelength;
break;
case TIFFTAG_TILEDEPTH:
*va_arg(ap, uint32*) = td->td_tiledepth;
break;
case TIFFTAG_DATATYPE:
switch (td->td_sampleformat) {
case SAMPLEFORMAT_UINT:
*va_arg(ap, uint16*) = DATATYPE_UINT;
break;
case SAMPLEFORMAT_INT:
*va_arg(ap, uint16*) = DATATYPE_INT;
break;
case SAMPLEFORMAT_IEEEFP:
*va_arg(ap, uint16*) = DATATYPE_IEEEFP;
break;
case SAMPLEFORMAT_VOID:
*va_arg(ap, uint16*) = DATATYPE_VOID;
break;
}
break;
case TIFFTAG_SAMPLEFORMAT:
*va_arg(ap, uint16*) = td->td_sampleformat;
break;
case TIFFTAG_IMAGEDEPTH:
*va_arg(ap, uint32*) = td->td_imagedepth;
break;
case TIFFTAG_STONITS:
*va_arg(ap, double*) = td->td_stonits;
break;
case TIFFTAG_SUBIFD:
*va_arg(ap, uint16*) = td->td_nsubifd;
*va_arg(ap, uint32**) = td->td_subifd;
break;
case TIFFTAG_YCBCRCOEFFICIENTS:
*va_arg(ap, float**) = td->td_ycbcrcoeffs;
break;
case TIFFTAG_YCBCRPOSITIONING:
*va_arg(ap, uint16*) = td->td_ycbcrpositioning;
break;
case TIFFTAG_YCBCRSUBSAMPLING:
*va_arg(ap, uint16*) = td->td_ycbcrsubsampling[0];
*va_arg(ap, uint16*) = td->td_ycbcrsubsampling[1];
break;
case TIFFTAG_WHITEPOINT:
*va_arg(ap, float**) = td->td_whitepoint;
break;
case TIFFTAG_PRIMARYCHROMATICITIES:
*va_arg(ap, float**) = td->td_primarychromas;
break;
case TIFFTAG_TRANSFERFUNCTION:
*va_arg(ap, uint16**) = td->td_transferfunction[0];
if (td->td_samplesperpixel - td->td_extrasamples > 1) {
*va_arg(ap, uint16**) = td->td_transferfunction[1];
*va_arg(ap, uint16**) = td->td_transferfunction[2];
}
break;
case TIFFTAG_REFERENCEBLACKWHITE:
*va_arg(ap, float**) = td->td_refblackwhite;
break;
case TIFFTAG_INKSET:
*va_arg(ap, uint16*) = td->td_inkset;
break;
case TIFFTAG_DOTRANGE:
*va_arg(ap, uint16*) = td->td_dotrange[0];
*va_arg(ap, uint16*) = td->td_dotrange[1];
break;
case TIFFTAG_INKNAMES:
*va_arg(ap, char**) = td->td_inknames;
break;
case TIFFTAG_NUMBEROFINKS:
*va_arg(ap, uint16*) = td->td_ninks;
break;
case TIFFTAG_TARGETPRINTER:
*va_arg(ap, char**) = td->td_targetprinter;
break;
case TIFFTAG_ICCPROFILE:
*va_arg(ap, uint32*) = td->td_profileLength;
*va_arg(ap, void**) = td->td_profileData;
break;
case TIFFTAG_PHOTOSHOP:
*va_arg(ap, uint32*) = td->td_photoshopLength;
*va_arg(ap, void**) = td->td_photoshopData;
break;
case TIFFTAG_RICHTIFFIPTC:
*va_arg(ap, uint32*) = td->td_richtiffiptcLength;
*va_arg(ap, void**) = td->td_richtiffiptcData;
break;
case TIFFTAG_XMLPACKET:
*va_arg(ap, uint32*) = td->td_xmlpacketLength;
*va_arg(ap, void**) = td->td_xmlpacketData;
break;
/* Begin Pixar Tags */
case TIFFTAG_PIXAR_IMAGEFULLWIDTH:
*va_arg(ap, uint32*) = td->td_imagefullwidth;
break;
case TIFFTAG_PIXAR_IMAGEFULLLENGTH:
*va_arg(ap, uint32*) = td->td_imagefulllength;
break;
case TIFFTAG_PIXAR_TEXTUREFORMAT:
*va_arg(ap, char**) = td->td_textureformat;
break;
case TIFFTAG_PIXAR_WRAPMODES:
*va_arg(ap, char**) = td->td_wrapmodes;
break;
case TIFFTAG_PIXAR_FOVCOT:
*va_arg(ap, float*) = td->td_fovcot;
break;
case TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN:
*va_arg(ap, float**) = td->td_matrixWorldToScreen;
break;
case TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA:
*va_arg(ap, float**) = td->td_matrixWorldToCamera;
break;
/* End Pixar Tags */
default:
{
const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
int i;
/*
* This can happen if multiple images are open with
* different codecs which have private tags. The
* global tag information table may then have tags
* that are valid for one file but not the other.
* If the client tries to get a tag that is not valid
* for the image's codec then we'll arrive here.
*/
if( fip == NULL || fip->field_bit != FIELD_CUSTOM )
{
TIFFError("_TIFFVGetField",
"%s: Invalid %stag \"%s\" (not supported by codec)",
tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",
_TIFFFieldWithTag(tif, tag)->field_name);
ret_val = 0;
break;
}
/*
** Do we have a custom value?
*/
ret_val = 0;
for( i = 0; i < td->td_customValueCount; i++ )
{
TIFFTagValue *tv = td->td_customValues + i;
if( tv->info->field_tag != tag )
continue;
if( fip->field_passcount )
{
*va_arg(ap, unsigned short *) = (unsigned short) tv->count;
*va_arg(ap, void **) = tv->value;
ret_val = 1;
break;
}
else if( fip->field_type == TIFF_ASCII )
{
*va_arg(ap, void **) = tv->value;
ret_val = 1;
break;
}
else
{
TIFFError("_TIFFVGetField",
"%s: Pass by value is not implemented.",
tif->tif_name);
break;
}
}
}
}
return( ret_val );
}
/*
* Return the value of a field in the
* internal directory structure.
*/
int
TIFFGetField(TIFF* tif, ttag_t tag, ...)
{
int status;
va_list ap;
va_start(ap, tag);
status = TIFFVGetField(tif, tag, ap);
va_end(ap);
return (status);
}
/*
* Like TIFFGetField, but taking a varargs
* parameter list. This routine is useful
* for building higher-level interfaces on
* top of the library.
*/
int
TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap)
{
const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);
return (fip && (isPseudoTag(tag) || TIFFFieldSet(tif, fip->field_bit)) ?
(*tif->tif_tagmethods.vgetfield)(tif, tag, ap) : 0);
}
#define CleanupField(member) { \
if (td->member) { \
_TIFFfree(td->member); \
td->member = 0; \
} \
}
/*
* Release storage associated with a directory.
*/
void
TIFFFreeDirectory(TIFF* tif)
{
TIFFDirectory *td = &tif->tif_dir;
int i;
CleanupField(td_colormap[0]);
CleanupField(td_colormap[1]);
CleanupField(td_colormap[2]);
CleanupField(td_documentname);
CleanupField(td_artist);
CleanupField(td_datetime);
CleanupField(td_hostcomputer);
CleanupField(td_imagedescription);
CleanupField(td_make);
CleanupField(td_model);
CleanupField(td_copyright);
CleanupField(td_pagename);
CleanupField(td_sampleinfo);
CleanupField(td_subifd);
CleanupField(td_ycbcrcoeffs);
CleanupField(td_inknames);
CleanupField(td_targetprinter);
CleanupField(td_whitepoint);
CleanupField(td_primarychromas);
CleanupField(td_refblackwhite);
CleanupField(td_transferfunction[0]);
CleanupField(td_transferfunction[1]);
CleanupField(td_transferfunction[2]);
CleanupField(td_profileData);
CleanupField(td_photoshopData);
CleanupField(td_richtiffiptcData);
CleanupField(td_xmlpacketData);
CleanupField(td_stripoffset);
CleanupField(td_stripbytecount);
/* Begin Pixar Tags */
CleanupField(td_textureformat);
CleanupField(td_wrapmodes);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -