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

📄 tif_dir.c

📁 一个国人自己实现图像库的程序(有参考价值)
💻 C
📖 第 1 页 / 共 3 页
字号:
	case TIFFTAG_INKNAMES:		i = va_arg(ap, int);		s = va_arg(ap, char*);		i = checkInkNamesString(tif, i, s);                status = i > 0;		if( i > 0 ) {			_TIFFsetNString(&td->td_inknames, s, i);			td->td_inknameslen = i;		}		break;	case TIFFTAG_NUMBEROFINKS:		td->td_ninks = (uint16) va_arg(ap, int);		break;	case TIFFTAG_TARGETPRINTER:		_TIFFsetString(&td->td_targetprinter, va_arg(ap, char*));		break;#endif#ifdef ICC_SUPPORT	case TIFFTAG_ICCPROFILE:		td->td_profileLength = (uint32) va_arg(ap, uint32);		_TIFFsetByteArray(&td->td_profileData, va_arg(ap, void*),		    td->td_profileLength);		break;#endif#ifdef PHOTOSHOP_SUPPORT 	case TIFFTAG_PHOTOSHOP:  		td->td_photoshopLength = (uint32) va_arg(ap, uint32);  		_TIFFsetByteArray (&td->td_photoshopData, va_arg(ap, void*), 			td->td_photoshopLength); 		break;#endif#ifdef IPTC_SUPPORT    case TIFFTAG_RICHTIFFIPTC:   		td->td_richtiffiptcLength = (uint32) va_arg(ap, uint32);#ifdef PHOTOSHOP_SUPPORT  		_TIFFsetLongArray ((uint32**)&td->td_richtiffiptcData, va_arg(ap, uint32*), 			td->td_richtiffiptcLength);#else  		_TIFFsetByteArray (&td->td_photoshopData, va_arg(ap, void*), 			td->td_photoshopLength);#endif 		break;#endif	default:		/*		 * 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.		 */		TIFFError("TIFFSetField",		    "%s: Invalid %stag \"%s\" (not supported by codec)",		    tif->tif_name, isPseudoTag(tag) ? "pseduo-" : "",		    _TIFFFieldWithTag(tif, tag)->field_name);		status = 0;		break;	}	if (status) {		TIFFSetFieldBit(tif, _TIFFFieldWithTag(tif, tag)->field_bit);		tif->tif_flags |= TIFF_DIRTYDIRECT;	}	va_end(ap);	return (status);badvalue:	TIFFError(tif->tif_name, "%d: Bad value for \"%s\"", v,	    _TIFFFieldWithTag(tif, tag)->field_name);	va_end(ap);	return (0);badvalue32:	TIFFError(tif->tif_name, "%ld: Bad value for \"%s\"", v32,	    _TIFFFieldWithTag(tif, tag)->field_name);	va_end(ap);	return (0);badvaluedbl:	TIFFError(tif->tif_name, "%f: Bad value for \"%s\"", 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_vsetfield)(tif, tag, ap) : 0;}static int_TIFFVGetField(TIFF* tif, ttag_t tag, va_list ap){	TIFFDirectory* td = &tif->tif_dir;	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_SOFTWARE:		*va_arg(ap, char**) = td->td_software;		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;#if SUBIFD_SUPPORT	case TIFFTAG_SUBIFD:		*va_arg(ap, uint16*) = td->td_nsubifd;		*va_arg(ap, uint32**) = td->td_subifd;		break;#endif#ifdef YCBCR_SUPPORT	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;#endif#ifdef COLORIMETRY_SUPPORT	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;#endif#ifdef CMYK_SUPPORT	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;#endif#ifdef ICC_SUPPORT	case TIFFTAG_ICCPROFILE:		*va_arg(ap, uint32*) = td->td_profileLength;		*va_arg(ap, void**) = td->td_profileData;		break;#endif#ifdef PHOTOSHOP_SUPPORT 	case TIFFTAG_PHOTOSHOP: 		*va_arg(ap, uint32*) = td->td_photoshopLength; 		*va_arg(ap, void**) = td->td_photoshopData; 		break;#endif#ifdef IPTC_SUPPORT 	case TIFFTAG_RICHTIFFIPTC: 		*va_arg(ap, uint32*) = td->td_richtiffiptcLength; 		*va_arg(ap, void**) = td->td_richtiffiptcData; 		break;#endif 	/* 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:		/*		 * 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.		 */		TIFFError("TIFFGetField",		    "%s: Invalid %stag \"%s\" (not supported by codec)",		    tif->tif_name, isPseudoTag(tag) ? "pseudo-" : "",		    _TIFFFieldWithTag(tif, tag)->field_name);		break;	}	return (1);}/* * Return the value of a field in the * internal directory structure. */intTIFFGetField(TIFF* tif, ttag_t tag, ...){

⌨️ 快捷键说明

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