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

📄 geo_tiffp.c

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 C
字号:
/********************************************************************** * *  geo_tiffp.c  Private TIFF interface module for GEOTIFF * *    This module implements the interface between the GEOTIFF *    tag parser and the TIFF i/o module. The current setup *    relies on the "libtiff" code, but if you use your own *    TIFF reader software, you may replace the module implementations *    here with your own calls. No "libtiff" dependencies occur *    anywhere else in this code. * **********************************************************************/ #include "geotiff.h"    /* public GTIFF interface */#include "geo_tiffp.h"  /* Private TIFF interface */#include "geo_keyp.h"   /* Private GTIFF interface *//* tiff size array global */gsize_t _gtiff_size[] = { 0, 1, 2, 4, 8, 1, 4, 8, 1, 2, 4, 1 };static int        _GTIFGetField (tiff_t *tif, pinfo_t tag, int *count, void *value );static int        _GTIFSetField (tiff_t *tif, pinfo_t tag, int  count, void *value );static tagtype_t  _GTIFTagType  (tiff_t *tif, pinfo_t tag);/* * Set up default TIFF handlers.  */void _GTIFSetDefaultTIFF(TIFFMethod *method){	if (!method) return;		method->get = _GTIFGetField;	method->set = _GTIFSetField;	method->type = _GTIFTagType;}gdata_t _GTIFcalloc(gsize_t size){    gdata_t data=(gdata_t)_TIFFmalloc((tsize_t)size);	if (data) _TIFFmemset((tdata_t)data,0,(tsize_t)size);	return data;}gdata_t _GTIFrealloc(gdata_t ptr, gsize_t size){    return( _TIFFrealloc((tdata_t)ptr, (tsize_t) size) );}void _GTIFmemcpy(gdata_t out,gdata_t in,gsize_t size){	_TIFFmemcpy((tdata_t)out,(tdata_t)in,(tsize_t)size);}void _GTIFFree(gdata_t data){	if (data) _TIFFfree((tdata_t)data);}/* returns the value of TIFF tag <tag>, or if * the value is an array, returns an allocated buffer * containing the values. Allocate a copy of the actual * buffer, sized up for updating. */static int _GTIFGetField (tiff_t *tif, pinfo_t tag, int *count, void *val ){	int status;	unsigned short scount=0;	char *tmp;	char *value;	gsize_t size = _gtiff_size[_GTIFTagType (tif,tag)];		if (_GTIFTagType(tif,  tag) == TYPE_ASCII)	{		status = TIFFGetField((TIFF *)tif,tag,&tmp);		if (!status) return status;		scount = (unsigned short) (strlen(tmp)+1);	}	else status = TIFFGetField((TIFF *)tif,tag,&scount,&tmp);	if (!status) return status;		*count = scount;	value = (char *)_GTIFcalloc( (scount+MAX_VALUES)*size);	if (!value) return 0;		_TIFFmemcpy( value, tmp,  size * scount);		*(char **)val = value;	return status;}/*  * Set a GeoTIFF TIFF field. */static int _GTIFSetField (tiff_t *tif, pinfo_t tag, int count, void *value ){	int status;	unsigned short scount = (unsigned short) count;	/* libtiff ASCII uses null-delimiter */	if (_GTIFTagType(tif,  tag) == TYPE_ASCII)		status = TIFFSetField((TIFF *)tif,tag,value);	else 		status = TIFFSetField((TIFF *)tif,tag,scount,value);	return status;}/* *  This routine is supposed to return the TagType of the <tag> *  TIFF tag. Unfortunately, "libtiff" does not provide this *  service by default, so we just have to "know" what type of tags *  we've got, and how many. We only define the ones Geotiff *  uses here, and others return UNKNOWN. The "tif" parameter *  is provided for those TIFF implementations that provide *  for tag-type queries. */static tagtype_t  _GTIFTagType  (tiff_t *tif, pinfo_t tag){	tagtype_t ttype;	(void) tif; /* dummy reference */		switch (tag)	{		case GTIFF_ASCIIPARAMS:    ttype=TYPE_ASCII; break;		case GTIFF_PIXELSCALE:		case GTIFF_TRANSMATRIX:		case GTIFF_TIEPOINTS:		case GTIFF_DOUBLEPARAMS:   ttype=TYPE_DOUBLE; break;		case GTIFF_GEOKEYDIRECTORY: ttype=TYPE_SHORT; break;		default: ttype = TYPE_UNKNOWN;	}		return ttype;}

⌨️ 快捷键说明

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