⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tif_dir.c

📁 开源组态软件
💻 C
📖 第 1 页 / 共 4 页
字号:
            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 + -