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

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

?? rawblockedimage.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
字號:
/****************************************************************************** * $Id: rawblockedimage.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  GeoTIFF Overview Builder * Purpose:  Implement the RawBlockedImage class, for holding ``under *           construction'' overviews in a temporary file.  * Author:   Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************/#include <assert.h>#include <string.h>#include <stdlib.h>#ifndef _WIN32#  include <unistd.h>#endif#include "rawblockedimage.h"#ifndef FALSE#  define FALSE 0#  define TRUE 1#endif#ifndef MAX#  define MIN(a,b)      ((a<b) ? a : b)#  define MAX(a,b)      ((a>b) ? a : b)#endif/************************************************************************//*                          RawBlockedImage()                           *//************************************************************************/RawBlockedImage::RawBlockedImage( int nXSizeIn, int nYSizeIn,                                  int nBlockXSizeIn, int nBlockYSizeIn,                                  int nBitsPerPixelIn ){    static int		nTempCounter = 0;    char		szFilename[128];    /* -------------------------------------------------------------------- *//*      Initialize stuff.                                               *//* -------------------------------------------------------------------- */    nXSize = nXSizeIn;    nYSize = nYSizeIn;    nBlockXSize = nBlockXSizeIn;    nBlockYSize = nBlockYSizeIn;    nBitsPerPixel = nBitsPerPixelIn;/* -------------------------------------------------------------------- *//*      Create the raw temporary file, trying to verify first that      *//*      it doesn't already exist.                                       *//* -------------------------------------------------------------------- */    fp = NULL;    while( fp == NULL )    {        sprintf( szFilename, "temp_%d.rbi", nTempCounter++ );        fp = fopen( szFilename, "r" );        if( fp != NULL )            fclose( fp );        else            fp = fopen( szFilename, "w+b" );    }    pszFilename = strdup( szFilename );    nCurFileSize = 0;/* -------------------------------------------------------------------- *//*      Initialize other stuff.                                         *//* -------------------------------------------------------------------- */    nBlocksPerRow = (nXSize + nBlockXSize - 1) / nBlockXSize;    nBlocksPerColumn = (nYSize + nBlockYSize - 1) / nBlockYSize;    nBytesPerBlock = (nBlockXSize*nBlockYSize*nBitsPerPixel + 7) / 8;    nBlocks = nBlocksPerRow * nBlocksPerColumn;    nBlocksInCache = 0;    nMaxBlocksInCache = MIN(nBlocks, 2*nBlocksPerRow);    papoBlocks = (RawBlock **) calloc(sizeof(RawBlock*),nBlocks);    poLRUHead = NULL;    poLRUTail = NULL;}/************************************************************************//*                          ~RawBlockedImage()                          *//************************************************************************/RawBlockedImage::~RawBlockedImage(){    int		i;    for( i = 0; i < nBlocks; i++ )    {        if( papoBlocks[i] != NULL )        {            if( papoBlocks[i]->pabyData != NULL )                free( papoBlocks[i]->pabyData );            delete papoBlocks[i];        }    }    if( papoBlocks != NULL)        free( papoBlocks );    fclose( fp );    unlink( pszFilename );	/* wrap this? */    free( pszFilename );}/************************************************************************//*                          InsertInLRUList()                           *//*                                                                      *//*      Insert this link at the beginning of the LRU list.  First       *//*      removed from it's current position if it is in the list.        *//************************************************************************/void RawBlockedImage::InsertInLRUList( RawBlock * poBlock ){/* -------------------------------------------------------------------- *//*      Remove from list, if it is currently in it.                     *//* -------------------------------------------------------------------- */    if( poBlock->poPrevLRU != NULL || poLRUHead == poBlock )        RemoveFromLRUList( poBlock );/* -------------------------------------------------------------------- *//*      Add at the head.                                                *//* -------------------------------------------------------------------- */    if( poLRUHead != NULL )    {        poLRUHead->poPrevLRU = poBlock;    }    poBlock->poNextLRU = poLRUHead;    poLRUHead = poBlock;    if( poLRUTail == NULL )        poLRUTail = poBlock;}/************************************************************************//*                         RemoveFromLRUList()                          *//*                                                                      *//*      Remove this block from the LRU list, if present.                *//************************************************************************/void RawBlockedImage::RemoveFromLRUList( RawBlock * poBlock ){/* -------------------------------------------------------------------- *//*      Is it even in the list?                                         *//* -------------------------------------------------------------------- */    if( poBlock->poPrevLRU == NULL && poLRUHead != poBlock )        return;/* -------------------------------------------------------------------- *//*      Fix the link before this in the list (or head pointer).         *//* -------------------------------------------------------------------- */    if( poBlock->poPrevLRU == NULL )    {        poLRUHead = poBlock->poNextLRU;    }    else    {        poBlock->poPrevLRU->poNextLRU = poBlock->poNextLRU;    }    /* -------------------------------------------------------------------- *//*      Fix the link after this one, or the tail pointer.               *//* -------------------------------------------------------------------- */    if( poBlock->poNextLRU == NULL )    {        poLRUTail = poBlock->poPrevLRU;    }    else    {        poBlock->poNextLRU->poPrevLRU = poBlock->poPrevLRU;    }/* -------------------------------------------------------------------- *//*      Update this link to indicate it isn't in the list now.          *//* -------------------------------------------------------------------- */    poBlock->poPrevLRU = poBlock->poNextLRU = NULL;}/************************************************************************//*                             FlushBlock()                             *//************************************************************************/void RawBlockedImage::FlushBlock( RawBlock * poBlock ){/* -------------------------------------------------------------------- *//*      If we aren't given a particular block to flush, then select     *//*      the lest recently used one from the LRU list.                   *//* -------------------------------------------------------------------- */    if( poBlock == NULL )    {        if( poLRUTail == NULL )            return;                poBlock = poLRUTail;    }/* -------------------------------------------------------------------- *//*      Remove from the LRU list.                                       *//* -------------------------------------------------------------------- */    RemoveFromLRUList( poBlock );/* -------------------------------------------------------------------- *//*      If the block has no data, then it doesn't really need to be     *//*      flushed.                                                        *//* -------------------------------------------------------------------- */    if( poBlock->pabyData == NULL )        return;/* -------------------------------------------------------------------- *//*      Is this block dirty?  If so we will have to try and save it.    *//* -------------------------------------------------------------------- */    if( poBlock->nDirty )    {        if( poBlock->nPositionInFile == -1 )            poBlock->nPositionInFile = nCurFileSize;        nCurFileSize += nBytesPerBlock;        if( fseek( fp, poBlock->nPositionInFile, SEEK_SET ) != 0 )        {            fprintf( stderr,                     "Seek to %d in overview spill file %s failed.\n",                     poBlock->nPositionInFile, pszFilename );            exit( 1 );        }        if( fwrite( poBlock->pabyData, 1, nBytesPerBlock, fp )            != (size_t) nBytesPerBlock )        {            fprintf( stderr,                      "Write of %d bytes at %d in overview spill file %s.\n"                     "Is the disk full?\n",                     nBytesPerBlock, poBlock->nPositionInFile, pszFilename );            exit( 1 );        }                poBlock->nDirty = FALSE;    }/* -------------------------------------------------------------------- *//*      Free the data block, and decrement used count.                  *//* -------------------------------------------------------------------- */    nBlocksInCache--;    if( poBlock->pabyData != NULL )        free( poBlock->pabyData );    poBlock->pabyData = NULL;}/************************************************************************//*                            GetRawBlock()                             *//************************************************************************/RawBlock *RawBlockedImage::GetRawBlock( int nXOff, int nYOff ){    int		nBlock = nXOff + nYOff * nBlocksPerRow;    RawBlock	*poBlock;    assert( nBlock >= 0 && nBlock < nBlocks );/* -------------------------------------------------------------------- *//*      Is this the first request?  If so, create the block object,     *//*      initialize the data memory, and return it.                      *//* -------------------------------------------------------------------- */    poBlock = papoBlocks[nBlock];    if( poBlock == NULL )    {        poBlock = papoBlocks[nBlock] = new RawBlock;        poBlock->nDirty = FALSE;        poBlock->poPrevLRU = poBlock->poNextLRU = NULL;        poBlock->nPositionInFile = -1;        poBlock->pabyData = (unsigned char *) calloc(1,nBytesPerBlock);        nBlocksInCache++;        if( poBlock->pabyData == NULL )        {            fprintf( stderr,                     "RawBlockedImage::GetRawBlock() - out of memory\n" );            exit( 1 );        }    }/* -------------------------------------------------------------------- *//*      Does this block need to be read off disk?                       *//* -------------------------------------------------------------------- */    else if( poBlock->nPositionInFile >= 0 && poBlock->pabyData == NULL )    {        nBlocksInCache++;        poBlock->pabyData = (unsigned char *) calloc(1,nBytesPerBlock);        fseek( fp, poBlock->nPositionInFile, SEEK_SET );        fread( poBlock->pabyData, nBytesPerBlock, 1, fp );    }/* -------------------------------------------------------------------- *//*      Does the data need to be allocated?                             *//* -------------------------------------------------------------------- */    else if( poBlock->pabyData == NULL )    {        poBlock->pabyData = (unsigned char *) calloc(1,nBytesPerBlock);        if( poBlock->pabyData == NULL )        {            fprintf( stderr,                     "RawBlockedImage::GetRawBlock() - out of memory\n" );            exit( 1 );        }    }/* -------------------------------------------------------------------- *//*      Push on the LRU stack, or pop it back to the top.               *//* -------------------------------------------------------------------- */    InsertInLRUList( poBlock );/* -------------------------------------------------------------------- *//*      If we have exceeded our self imposed caching limit, flush       *//*      one block.                                                      *//* -------------------------------------------------------------------- */    if( nBlocksInCache > nMaxBlocksInCache )        FlushBlock( NULL );    return( poBlock );}/************************************************************************//*                              GetTile()                               *//************************************************************************/unsigned char *RawBlockedImage::GetTile( int nXOff, int nYOff ){    RawBlock	*poBlock;    poBlock = GetRawBlock(nXOff,nYOff);    if( poBlock != NULL )        return poBlock->pabyData;    else        return NULL;}/************************************************************************//*                          GetTileForUpdate()                          *//************************************************************************/unsigned char *RawBlockedImage::GetTileForUpdate( int nXOff, int nYOff ){    RawBlock	*poBlock;    poBlock = GetRawBlock(nXOff,nYOff);    if( poBlock != NULL )    {        poBlock->nDirty = TRUE;                return poBlock->pabyData;    }    else        return NULL;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天使萌一区二区三区免费观看| 伦理电影国产精品| 中文字幕在线不卡视频| 26uuu亚洲| 精品国产伦一区二区三区观看体验| 777午夜精品视频在线播放| 在线播放视频一区| 91精品国产乱码| 精品久久久久久最新网址| 日韩欧美国产成人一区二区| 日韩一级大片在线| 2021中文字幕一区亚洲| 久久日一线二线三线suv| 久久精品一区八戒影视| 国产欧美视频在线观看| 中文字幕高清不卡| 亚洲欧美综合网| 悠悠色在线精品| 亚洲va天堂va国产va久| 日本欧美肥老太交大片| 久久精品免费观看| 国产精品一区二区在线看| 国产一区二区电影| 成人永久免费视频| 91碰在线视频| 欧美精品视频www在线观看| 日韩亚洲欧美成人一区| 久久久久久麻豆| 中文字幕一区二区三区不卡 | 日韩免费观看高清完整版| 日韩三级免费观看| 久久久777精品电影网影网| 欧美经典三级视频一区二区三区| 中文字幕不卡在线播放| 一区二区免费在线播放| 免费在线看成人av| 丰满亚洲少妇av| 欧美综合亚洲图片综合区| 日韩精品在线看片z| 欧美国产一区二区在线观看 | 国产99久久久国产精品潘金| 99视频一区二区| 欧美日韩免费观看一区三区| 日韩免费成人网| 18成人在线视频| 视频一区二区三区中文字幕| 国产精品一线二线三线精华| 色中色一区二区| 精品久久久久久久久久久久久久久 | 久久久久久久精| 亚洲精品自拍动漫在线| 制服丝袜国产精品| 精一区二区三区| 国产剧情一区二区| 不卡av在线免费观看| 在线这里只有精品| 日韩一区二区在线观看视频| 337p粉嫩大胆噜噜噜噜噜91av| 欧美国产日韩a欧美在线观看| 亚洲乱码日产精品bd| 久久99国产精品久久| 亚洲超碰97人人做人人爱| 国产成人综合亚洲网站| 欧美三级日韩在线| 欧美国产日韩a欧美在线观看| 午夜在线电影亚洲一区| 成人黄色在线视频| 精品国产乱码久久久久久闺蜜| 一区二区在线观看免费视频播放| 国产麻豆精品theporn| 欧美日韩国产综合一区二区三区| 久久这里只有精品6| 五月综合激情婷婷六月色窝| 91在线丨porny丨国产| 精品不卡在线视频| 日韩av中文字幕一区二区| 99在线视频精品| 久久久久九九视频| 毛片av一区二区| 精品视频一区二区不卡| 亚洲人成亚洲人成在线观看图片| 国产黄色91视频| 精品对白一区国产伦| 三级久久三级久久| 欧美亚洲国产一区在线观看网站| 国产欧美精品一区二区三区四区| 久久精品av麻豆的观看方式| 欧美伦理视频网站| 亚洲一级片在线观看| 99视频一区二区| 国产精品美女久久久久久久久 | 欧美三级韩国三级日本三斤| 国产精品视频一二三| 国产精品一级在线| 日韩美一区二区三区| 免费精品视频最新在线| 欧美乱熟臀69xxxxxx| 亚洲成人1区2区| 欧美日韩一区二区在线视频| 亚洲你懂的在线视频| av亚洲精华国产精华精华| 欧美激情在线一区二区| 国产v综合v亚洲欧| 国产拍揄自揄精品视频麻豆| 国产乱人伦精品一区二区在线观看| 精品日韩在线一区| 久久se这里有精品| 欧美成人三级在线| 国内成人自拍视频| 欧美国产视频在线| 99久久精品国产麻豆演员表| 亚洲欧美偷拍三级| 欧美无砖专区一中文字| 亚洲成av人片一区二区| 在线成人午夜影院| 久久精品国产亚洲aⅴ| 精品91自产拍在线观看一区| 国产精品一卡二| 亚洲欧洲日韩综合一区二区| 色吧成人激情小说| 亚洲成精国产精品女| 日韩一区二区三区三四区视频在线观看 | 91麻豆精品国产91久久久久| 午夜影视日本亚洲欧洲精品| 91精品在线观看入口| 免播放器亚洲一区| 久久久久国产精品免费免费搜索| 国产成人在线影院| 最新国产の精品合集bt伙计| 欧美日韩色一区| 免费观看在线综合色| 2023国产精品自拍| 99久久精品国产观看| 日韩电影在线观看一区| 久久影视一区二区| 色婷婷综合激情| 奇米在线7777在线精品| 国产日韩在线不卡| 在线观看亚洲精品视频| 青草av.久久免费一区| 欧美国产精品v| 欧美精品在线视频| 国产福利一区在线| 亚洲一二三区在线观看| 精品捆绑美女sm三区| 91麻豆.com| 精品制服美女久久| 亚洲色图在线看| 日韩丝袜美女视频| 97精品久久久午夜一区二区三区| 日韩高清中文字幕一区| 中文字幕欧美三区| 欧美疯狂性受xxxxx喷水图片| 国产精品资源站在线| 亚洲国产视频在线| 国产三级精品视频| 在线成人高清不卡| 99久久免费视频.com| 蜜桃av一区二区三区电影| 中文字幕一区二区三区四区不卡 | 色老汉一区二区三区| 奇米影视一区二区三区| 亚洲欧洲日韩在线| 精品裸体舞一区二区三区| 在线一区二区视频| 国产99久久久精品| 日本免费在线视频不卡一不卡二| 一色桃子久久精品亚洲| 欧美成人激情免费网| 91成人在线观看喷潮| 成人一区在线观看| 久久成人免费电影| 亚洲线精品一区二区三区八戒| 欧美国产乱子伦 | 国产综合色在线视频区| 天堂久久久久va久久久久| 亚洲精选视频在线| 国产精品美女久久福利网站| 精品国产一区二区三区av性色| 欧美三级日韩在线| 日本高清成人免费播放| aaa国产一区| 成人一级片网址| 久久99国产精品免费网站| 五月综合激情网| 亚洲最快最全在线视频| 中文字幕一区在线观看| 五月激情综合色| 亚洲一区电影777| 亚洲欧美日韩国产综合| 国产精品久久国产精麻豆99网站| 亚洲精品在线免费观看视频| 欧美精品123区| 欧美日产国产精品| 欧美午夜一区二区三区免费大片| 91小视频在线免费看| 成人黄色电影在线| 成人小视频在线| 成人免费视频网站在线观看| 国产91清纯白嫩初高中在线观看|