亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? geo_new.c

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? C
字號:
/********************************************************************** * *  geo_new.c  -- Public routines for GEOTIFF GeoKey access. * *    Written By: Niles D. Ritter. * *  copyright (c) 1995   Niles D. Ritter * *  Permission granted to use this software, so long as this copyright *  notice accompanies any products derived therefrom. * *    20 June, 1995      Niles D. Ritter         New *    7 July,  1995      Greg Martin             Fix index * * $Log: geo_new.c,v $ * Revision 1.12  2006/06/26 20:03:37  fwarmerdam * If the ascii parameters list is too short for the declared size * of an ascii parameter, but it doesn't start off the end of the * available string then just trim the length.  This is to make the * ESRI sample data file 34105h2.tif work properly.  I wish we had * a way of issuing warnings! * * Revision 1.11  2004/04/27 21:32:08  warmerda * Allow GTIFNew(NULL) to work * * Revision 1.10  2003/09/02 13:52:17  warmerda * various hacks to support improperly terminated asciiparms * * Revision 1.9  2003/06/19 20:04:11  warmerda * fix memory underwrite if ascii parameter string is zero length * * Revision 1.8  2003/06/05 14:20:45  warmerda * cosmetic formatting changes * **********************************************************************/#include "geotiffio.h"   /* public interface        */#include "geo_tiffp.h" /* external TIFF interface */#include "geo_keyp.h"  /* private interface       *//* private local routines */static int ReadKey(GTIF* gt, TempKeyData* tempData,                   KeyEntry* entptr, GeoKey* keyptr);/********************************************************************** * *                        Public Routines * **********************************************************************//** * Given an open TIFF file, look for GTIF keys and  *  values and return GTIF structure.This function creates a GeoTIFF information interpretation handle(GTIF *) based on a passed in TIFF handle originally from XTIFFOpen().  Even though the argument (<b>tif</b>) is shown as type <tt>void *</tt>, it is really normallyof type <tt>TIFF *</tt>.<p>The returned GTIF handle can be used to read or write GeoTIFF tags using the various GTIF functions.  The handle should be destroyed usingGTIFFree() before the file is closed with TIFFClose().<p>If the file accessed has no GeoTIFF keys, an valid (but empty) GTIF isstill returned.  GTIFNew() is used both for existing files being read, andfor new TIFF files that will have GeoTIFF tags written to them.<p> */ GTIF* GTIFNew(void *tif){    GTIF* gt=(GTIF*)0;    int count,bufcount,index;    GeoKey *keyptr;    pinfo_t *data;    KeyEntry *entptr;    KeyHeader *header;    TempKeyData tempData;	    gt = (GTIF*)_GTIFcalloc( sizeof(GTIF));    if (!gt) goto failure;		    /* install TIFF file and I/O methods */    gt->gt_tif = (tiff_t *)tif;    _GTIFSetDefaultTIFF(&gt->gt_methods);    tempData.tk_asciiParams = 0;    tempData.tk_asciiParamsLength = 0;    tempData.tk_asciiParamsOffset = 0;	    /* since this is an array, GTIF will allocate the memory */    if ( tif == NULL          || !(gt->gt_methods.get)(tif, GTIFF_GEOKEYDIRECTORY, &gt->gt_nshorts, &data ))    {        /* No ProjectionInfo, create a blank one */        data=(pinfo_t*)_GTIFcalloc((4+MAX_VALUES)*sizeof(pinfo_t));        if (!data) goto failure;	        header = (KeyHeader *)data;        header->hdr_version = GvCurrentVersion;        header->hdr_rev_major = GvCurrentRevision;        header->hdr_rev_minor = GvCurrentMinorRev;        gt->gt_nshorts=sizeof(KeyHeader)/sizeof(pinfo_t);    }    gt->gt_short = data;    header = (KeyHeader *)data;	    if (header->hdr_version > GvCurrentVersion) goto failure;    if (header->hdr_rev_major > GvCurrentRevision)    {        /* issue warning */    }	    /* If we got here, then the geokey can be parsed */    count = header->hdr_num_keys;    gt->gt_num_keys = count;    gt->gt_version  = header->hdr_version;    gt->gt_rev_major  = header->hdr_rev_major;    gt->gt_rev_minor  = header->hdr_rev_minor;    bufcount = count+MAX_KEYS; /* allow for expansion */    /* Get the PARAMS Tags, if any */    if (tif == NULL        || !(gt->gt_methods.get)(tif, GTIFF_DOUBLEPARAMS,                                 &gt->gt_ndoubles, &gt->gt_double ))    {        gt->gt_double=(double*)_GTIFcalloc(MAX_VALUES*sizeof(double));        if (!gt->gt_double) goto failure;	    }    if ( tif == NULL         || !(gt->gt_methods.get)(tif, GTIFF_ASCIIPARAMS,                                  &tempData.tk_asciiParamsLength,                                  &tempData.tk_asciiParams ))    {        tempData.tk_asciiParams         = 0;        tempData.tk_asciiParamsLength   = 0;    }    else    {        /* last NULL doesn't count; "|" used for delimiter */        --tempData.tk_asciiParamsLength;    }    /* allocate space for GeoKey array and its index */    gt->gt_keys = (GeoKey *)_GTIFcalloc( sizeof(GeoKey)*bufcount);    if (!gt->gt_keys) goto failure;    gt->gt_keyindex = (int *)_GTIFcalloc( sizeof(int)*(MAX_KEYINDEX+1));    if (!gt->gt_keyindex) goto failure;	    /*  Loop to get all GeoKeys */    entptr = ((KeyEntry *)data) + 1;    keyptr = gt->gt_keys;    gt->gt_keymin = MAX_KEYINDEX;    gt->gt_keymax = 0;    for (index=1; index<=count; index++,entptr++)    {        if (!ReadKey(gt, &tempData, entptr, ++keyptr))            goto failure;			        /* Set up the index (start at 1, since 0=unset) */        gt->gt_keyindex[entptr->ent_key] = index;		    }    if( tempData.tk_asciiParams != NULL )        _GTIFFree( tempData.tk_asciiParams );	    return gt;	  failure:    /* Notify of error */    GTIFFree (gt);    return (GTIF *)0;}/********************************************************************** * *                        Private Routines * **********************************************************************//* * Given KeyEntry, read in the GeoKey value location and set up *  the Key structure, returning 0 if failure. */static int ReadKey(GTIF* gt, TempKeyData* tempData,                   KeyEntry* entptr, GeoKey* keyptr){    int offset,count;	    keyptr->gk_key = entptr->ent_key;    keyptr->gk_count = entptr->ent_count;    count = entptr->ent_count;    offset = entptr->ent_val_offset;    if (gt->gt_keymin > keyptr->gk_key)  gt->gt_keymin=keyptr->gk_key;    if (gt->gt_keymax < keyptr->gk_key)  gt->gt_keymax=keyptr->gk_key;	    if (entptr->ent_location)        keyptr->gk_type = (gt->gt_methods.type)(gt->gt_tif,entptr->ent_location);    else        keyptr->gk_type = (gt->gt_methods.type)(gt->gt_tif,GTIFF_GEOKEYDIRECTORY);	      switch (entptr->ent_location)    {        case GTIFF_LOCAL:            /* store value into data value */            *(pinfo_t *)(&keyptr->gk_data) = entptr->ent_val_offset;            break;        case GTIFF_GEOKEYDIRECTORY:            keyptr->gk_data = (char *)(gt->gt_short+offset);            if (gt->gt_nshorts < offset+count)                gt->gt_nshorts = offset+count;            break;        case GTIFF_DOUBLEPARAMS:            keyptr->gk_data = (char *)(gt->gt_double+offset);            if (gt->gt_ndoubles < offset+count)                gt->gt_ndoubles = offset+count;            break;        case GTIFF_ASCIIPARAMS:            if( offset + count == tempData->tk_asciiParamsLength + 1                 && count > 0 )            {                /* some vendors seem to feel they should not use the                    terminating '|' char, but do include a terminating '\0'                   which we lose in the low level reading code.                     If this is the case, drop the extra character */                count--;            }            else if (offset < tempData->tk_asciiParamsLength                     && offset + count > tempData->tk_asciiParamsLength )            {                count = tempData->tk_asciiParamsLength - offset;                /* issue warning... if we could */            }            else if (offset + count > tempData->tk_asciiParamsLength)                return (0);            keyptr->gk_data = (char *) _GTIFcalloc (MAX(1,count+1));            _GTIFmemcpy (keyptr->gk_data,                         tempData->tk_asciiParams + offset, count);            if( keyptr->gk_data[MAX(0,count-1)] == '|' )                keyptr->gk_data[MAX(0,count-1)] = '\0';            else                keyptr->gk_data[MAX(0,count)] = '\0';            break;        default:            return 0; /* failure */    }    keyptr->gk_size = _gtiff_size[keyptr->gk_type];	    return 1; /* success */}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久亚洲综合网 | 国产精品天天看| 日韩av一级片| 亚洲精品一线二线三线| 韩国成人在线视频| 国产精品你懂的| 日本韩国欧美在线| 蜜乳av一区二区| 亚洲欧洲国产日本综合| 欧美亚洲国产一区二区三区va| 蜜臀久久99精品久久久久久9 | 欧美本精品男人aⅴ天堂| 久久成人免费网站| 亚洲精品成人在线| 国产亚洲欧美一区在线观看| 欧美在线看片a免费观看| 激情深爱一区二区| 五月天国产精品| 亚洲欧美国产三级| 国产亚洲自拍一区| 91精品国产综合久久福利软件| 高清视频一区二区| 免费看日韩a级影片| 亚洲成在线观看| 亚洲精品乱码久久久久久久久 | 51精品视频一区二区三区| 91在线无精精品入口| 韩国女主播成人在线| 青青草97国产精品免费观看 | 精彩视频一区二区| 麻豆91精品视频| 日本不卡一区二区| 午夜欧美在线一二页| 一区二区三区四区不卡在线| 中文字幕亚洲视频| 亚洲免费视频中文字幕| 一区二区日韩电影| 亚洲精品视频在线| 亚洲午夜在线电影| 日韩专区中文字幕一区二区| 麻豆精品一区二区| 国产一区二区91| 91丨九色丨黑人外教| 色天天综合久久久久综合片| 欧美色视频一区| 欧美tk—视频vk| 中文av一区二区| 亚洲另类在线制服丝袜| 美女网站视频久久| 丰满白嫩尤物一区二区| 成人午夜av电影| www.日韩大片| 欧美电影免费提供在线观看| 久久蜜桃av一区精品变态类天堂| 国产精品视频观看| 日韩激情中文字幕| 91小视频在线观看| 久久综合色综合88| 天天影视涩香欲综合网| 成人午夜免费视频| 精品成人一区二区三区| 国产v日产∨综合v精品视频| 久久久久久久精| 精品少妇一区二区三区| 色婷婷久久久久swag精品 | 成人午夜在线播放| 欧美精品一区二| 日韩精品乱码免费| 欧美日本韩国一区二区三区视频| 国产精品乱码一区二区三区软件 | 精品国产网站在线观看| 亚洲一卡二卡三卡四卡五卡| 久久福利资源站| 在线观看三级视频欧美| 中文字幕免费在线观看视频一区| 精品在线视频一区| 日韩一区和二区| 美日韩一区二区三区| 欧美一区二区三区日韩| 日本欧美一区二区三区乱码| 欧美日韩国产三级| 免费在线观看一区| 亚洲精品在线观| 成人福利视频网站| 亚洲精品水蜜桃| 欧美一区二区三区四区视频| 久久电影国产免费久久电影| 国产亚洲午夜高清国产拍精品 | 亚洲制服丝袜av| 欧美片网站yy| 国产精品一级黄| 亚洲欧美一区二区三区国产精品| 日本乱人伦aⅴ精品| 玖玖九九国产精品| 亚洲欧洲美洲综合色网| 日韩欧美在线网站| 9人人澡人人爽人人精品| 亚洲成av人综合在线观看| 国产视频在线观看一区二区三区| 成人免费三级在线| 精品一区二区三区免费毛片爱| 亚洲天堂2016| 国产精品网站在线观看| 欧美一区二区视频在线观看2020| 成人黄色大片在线观看| 日韩精品一级中文字幕精品视频免费观看 | 国产精品久久久久久亚洲毛片| 日本伦理一区二区| 色欧美片视频在线观看在线视频| 麻豆视频一区二区| 日韩精品一二三区| 午夜精品在线视频一区| 夜夜嗨av一区二区三区网页| 国产精品久久影院| 中文字幕一区二区三区蜜月| 亚洲国产经典视频| 国产精品嫩草久久久久| 亚洲欧洲精品天堂一级 | 亚洲激情五月婷婷| 国产精品久久久久久亚洲伦| 中文字幕人成不卡一区| 亚洲欧美偷拍三级| 亚洲图片欧美色图| 日韩高清欧美激情| 国产91富婆露脸刺激对白| 成人性生交大片免费看在线播放 | 亚洲视频每日更新| 亚洲一二三区不卡| 男人的j进女人的j一区| 国产美女精品人人做人人爽| 成人动漫av在线| 欧美另类一区二区三区| 日韩精品一区二区三区中文精品| 欧美精品一区二区三区高清aⅴ| 国产嫩草影院久久久久| 亚洲午夜精品久久久久久久久| 日韩成人伦理电影在线观看| 国产一区二区导航在线播放| 欧美艳星brazzers| 国产拍欧美日韩视频二区| 亚洲午夜久久久久久久久电影网 | 蜜乳av一区二区三区| 91捆绑美女网站| 欧美电视剧在线观看完整版| 中文字幕乱码亚洲精品一区| 卡一卡二国产精品| 欧美高清hd18日本| 亚洲综合免费观看高清在线观看| 精久久久久久久久久久| 日韩欧美一级特黄在线播放| 亚洲欧美中日韩| 99re成人在线| 26uuu色噜噜精品一区二区| 日韩影视精彩在线| 欧美一区二区三区免费| 日韩av在线发布| 欧美一区二区三区免费| 蜜桃在线一区二区三区| 日韩欧美一级二级| 久久精品国产99国产精品| 欧美大度的电影原声| 婷婷国产在线综合| 日韩精品影音先锋| 国产精品88av| 亚洲人成在线观看一区二区| av激情成人网| 日韩高清一级片| 欧美成人vps| 91首页免费视频| 一区二区在线观看免费视频播放| 欧美影视一区在线| 亚洲成av人**亚洲成av**| 欧美一级视频精品观看| 国产精品综合视频| 亚洲愉拍自拍另类高清精品| 日韩欧美色电影| av中文字幕在线不卡| 亚洲一区二区高清| 久久天堂av综合合色蜜桃网| av中文字幕不卡| 精品一二三四区| 亚洲图片自拍偷拍| 国产午夜精品久久久久久免费视| 色狠狠色噜噜噜综合网| 黄网站免费久久| 蜜桃av一区二区| 婷婷丁香激情综合| 一区二区三区欧美| 一区在线播放视频| 国产精品久久久久一区二区三区 | 欧美激情综合网| 久久久久久久久久久久久久久99| 91电影在线观看| 成人在线综合网| 成人h动漫精品一区二| 久久9热精品视频| 狠狠色综合播放一区二区| 偷窥少妇高潮呻吟av久久免费| 一区二区三区精品视频| 亚洲精品大片www|