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

📄 tif_dir.c

📁 tiff文件开发库
💻 C
📖 第 1 页 / 共 3 页
字号:
		_TIFFsetByteArray(&td->td_xmlpacketData, va_arg(ap, void*),		    td->td_xmlpacketLength);		break;        default: {            const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);            TIFFTagValue *tv;            int           tv_size, iCustom;            /*             * 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 set a tag that is not valid             * for the image's codec then we'll arrive here.  This             * happens, for example, when tiffcp is used to convert             * between compression schemes and codec-specific tags             * are blindly copied.             */            if( fip == NULL || fip->field_bit != FIELD_CUSTOM )            {		TIFFError(module,		    "%s: Invalid %stag \"%s\" (not supported by codec)",		    tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",		    _TIFFFieldWithTag(tif, tag)->field_name);		status = 0;		break;            }            /*             * Find the existing entry for this custom value.             */            tv = NULL;            for( iCustom = 0; iCustom < td->td_customValueCount; iCustom++ )            {                if( td->td_customValues[iCustom].info == fip )                {                    tv = td->td_customValues + iCustom;                    if( tv->value != NULL )                        _TIFFfree( tv->value );                    break;                }            }            /*             * Grow the custom list if the entry was not found.             */            if( tv == NULL )            {                td->td_customValueCount++;                if( td->td_customValueCount > 1 )                    td->td_customValues = (TIFFTagValue *)                        _TIFFrealloc(td->td_customValues,                                     sizeof(TIFFTagValue) * td->td_customValueCount);                else                    td->td_customValues = (TIFFTagValue *)                        _TIFFmalloc(sizeof(TIFFTagValue));                tv = td->td_customValues + (td->td_customValueCount-1);                tv->info = fip;                tv->value = NULL;                tv->count = 0;            }            /*             * Set custom value ... save a copy of the custom tag value.             */            tv_size = TIFFDataWidth(fip->field_type);            if( fip->field_passcount )                tv->count = (int) va_arg(ap, int);            else                tv->count = 1;            if( fip->field_passcount )            {                tv->value = _TIFFmalloc(tv_size * tv->count);		if ( !tv->value ) {			va_end(ap);			return 0;		}                _TIFFmemcpy( tv->value, (void *) va_arg(ap,void*),                             tv->count * tv_size );            }            else if( fip->field_type == TIFF_ASCII )            {                const char *value = (const char *) va_arg(ap,const char *);                tv->count = strlen(value)+1;                tv->value = _TIFFmalloc(tv->count);		if ( !tv->value ) {			va_end(ap);			return 0;		}                strcpy( tv->value, value );            }            else            {                /* not supporting "pass by value" types yet */		TIFFWarning(module, " ... pass by value not implemented.");                tv->value = _TIFFmalloc(tv_size * tv->count);		if ( !tv->value ) {			va_end(ap);			return 0;		}                _TIFFmemset( tv->value, 0, tv->count * tv_size );                status = 0;            }          }	}	if (status) {            TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);            tif->tif_flags |= TIFF_DIRTYDIRECT;	}	va_end(ap);	return (status);badvalue:	TIFFError(module, "%.1000s: Bad value %d for \"%s\"",		  tif->tif_name, v, _TIFFFieldWithTag(tif, tag)->field_name);	va_end(ap);	return (0);badvalue32:	TIFFError(module, "%.1000s: Bad value %ld for \"%s\"",		   tif->tif_name, v32, _TIFFFieldWithTag(tif, tag)->field_name);	va_end(ap);	return (0);badvaluedbl:	TIFFError(module, "%.1000s: Bad value %f for \"%s\"",		  tif->tif_name, d, _TIFFFieldWithTag(tif, tag)->field_name);	va_end(ap);	return (0);}/* * Return 1/0 according to whether or not * it is permissible to set the tag's value. * Note that we allow ImageLength to be changed * so that we can append and extend to images. * Any other tag may not be altered once writing * has commenced, unless its value has no effect * on the format of the data that is written. */static intOkToChangeTag(TIFF* tif, ttag_t tag){	const TIFFFieldInfo* fip = _TIFFFindFieldInfo(tif, tag, TIFF_ANY);	if (!fip) {			/* unknown tag */		TIFFError("TIFFSetField", "%s: Unknown %stag %u",		    tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "", tag);		return (0);	}	if (tag != TIFFTAG_IMAGELENGTH && (tif->tif_flags & TIFF_BEENWRITING) &&	    !fip->field_oktochange) {		/*		 * Consult info table to see if tag can be changed		 * after we've started writing.  We only allow changes		 * to those tags that don't/shouldn't affect the		 * compression and/or format of the data.		 */		TIFFError("TIFFSetField",		    "%s: Cannot modify tag \"%s\" while writing",		    tif->tif_name, fip->field_name);		return (0);	}	return (1);}/* * Record the value of a field in the * internal directory structure.  The * field will be written to the file * when/if the directory structure is * updated. */intTIFFSetField(TIFF* tif, ttag_t tag, ...){	va_list ap;	int status;	va_start(ap, tag);	status = TIFFVSetField(tif, tag, ap);	va_end(ap);	return (status);}/* * Like TIFFSetField, but taking a varargs * parameter list.  This routine is useful * for building higher-level interfaces on * top of the library. */intTIFFVSetField(TIFF* tif, ttag_t tag, va_list ap){	return OkToChangeTag(tif, tag) ?	    (*tif->tif_tagmethods.vsetfield)(tif, tag, ap) : 0;}static int_TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap){    TIFFDirectory* td = &tif->tif_dir;    int            ret_val = 1;    switch (tag) {	case TIFFTAG_SUBFILETYPE:            *va_arg(ap, uint32*) = td->td_subfiletype;            break;	case TIFFTAG_IMAGEWIDTH:            *va_arg(ap, uint32*) = td->td_imagewidth;            break;	case TIFFTAG_IMAGELENGTH:            *va_arg(ap, uint32*) = td->td_imagelength;            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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -