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

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

?? dgif_lib.c

?? 開源組態軟件
?? C
?? 第 1 頁 / 共 3 頁
字號:
    } else {
        if ((GifFile->SavedImages =
             (SavedImage *)malloc(sizeof(SavedImage))) == NULL) {
            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
            return GIF_ERROR;
        }
    }

	sp = &GifFile->SavedImages[GifFile->ImageCount];
	memcpy(&sp->ImageDesc, &GifFile->Image, sizeof(GifImageDesc));
    if (GifFile->Image.ColorMap != NULL) {
        sp->ImageDesc.ColorMap = MakeMapObject(
                GifFile->Image.ColorMap->ColorCount,
                GifFile->Image.ColorMap->Colors);
    }
	sp->RasterBits = (char *)NULL;
	sp->ExtensionBlockCount = 0;
	sp->ExtensionBlocks = (ExtensionBlock *)NULL;

    GifFile->ImageCount++;

    Private->PixelCount = (long) GifFile->Image.Width *
			    (long) GifFile->Image.Height;

    DGifSetupDecompress(GifFile);  /* Reset decompress algorithm parameters. */

    return GIF_OK;
}

/******************************************************************************
*  Get one full scanned line (Line) of length LineLen from GIF file.	      *
******************************************************************************/
int DGifGetLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
{
    GifByteType *Dummy;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    if (!IS_READABLE(Private)) {
	/* This file was NOT open for reading: */
	_GifError = D_GIF_ERR_NOT_READABLE;
	return GIF_ERROR;
    }

    if (!LineLen) LineLen = GifFile->Image.Width;

#if defined(__MSDOS__) || defined(__GNUC__)
    if ((Private->PixelCount -= LineLen) > 0xffff0000UL) {
#else
    if ((Private->PixelCount -= LineLen) > 0xffff0000) {
#endif /* __MSDOS__ */
	_GifError = D_GIF_ERR_DATA_TOO_BIG;
	return GIF_ERROR;
    }

    if (DGifDecompressLine(GifFile, Line, LineLen) == GIF_OK) {
	if (Private->PixelCount == 0) {
	    /* We probably would not be called any more, so lets clean 	     */
	    /* everything before we return: need to flush out all rest of    */
	    /* image until empty block (size 0) detected. We use GetCodeNext.*/
	    do if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
		return GIF_ERROR;
	    while (Dummy != NULL);
	}
	return GIF_OK;
    }
    else
	return GIF_ERROR;
}

/******************************************************************************
* Put one pixel (Pixel) into GIF file.					      *
******************************************************************************/
int DGifGetPixel(GifFileType *GifFile, GifPixelType Pixel)
{
    GifByteType *Dummy;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    if (!IS_READABLE(Private)) {
	/* This file was NOT open for reading: */
	_GifError = D_GIF_ERR_NOT_READABLE;
	return GIF_ERROR;
    }

#if defined(__MSDOS__) || defined(__GNUC__)
    if (--Private->PixelCount > 0xffff0000UL)
#else
    if (--Private->PixelCount > 0xffff0000)
#endif /* __MSDOS__ */
    {
	_GifError = D_GIF_ERR_DATA_TOO_BIG;
	return GIF_ERROR;
    }

    if (DGifDecompressLine(GifFile, &Pixel, 1) == GIF_OK) {
	if (Private->PixelCount == 0) {
	    /* We probably would not be called any more, so lets clean 	     */
	    /* everything before we return: need to flush out all rest of    */
	    /* image until empty block (size 0) detected. We use GetCodeNext.*/
	    do if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
		return GIF_ERROR;
	    while (Dummy != NULL);
	}
	return GIF_OK;
    }
    else
	return GIF_ERROR;
}

/******************************************************************************
*   Get an extension block (see GIF manual) from gif file. This routine only  *
* returns the first data block, and DGifGetExtensionNext shouldbe called      *
* after this one until NULL extension is returned.			      *
*   The Extension should NOT be freed by the user (not dynamically allocated).*
*   Note it is assumed the Extension desc. header ('!') has been read.	      *
******************************************************************************/
int DGifGetExtension(GifFileType *GifFile, int *ExtCode,
						    GifByteType **Extension)
{
    GifByteType Buf;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    if (!IS_READABLE(Private)) {
	/* This file was NOT open for reading: */
	_GifError = D_GIF_ERR_NOT_READABLE;
	return GIF_ERROR;
    }

    if (READ(GifFile,&Buf, 1) != 1) {
	_GifError = D_GIF_ERR_READ_FAILED;
	return GIF_ERROR;
    }
    *ExtCode = Buf;

    return DGifGetExtensionNext(GifFile, Extension);
}

/******************************************************************************
*   Get a following extension block (see GIF manual) from gif file. This      *
* routine should be called until NULL Extension is returned.		      *
*   The Extension should NOT be freed by the user (not dynamically allocated).*
******************************************************************************/
int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **Extension)
{
    GifByteType Buf;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    if (READ(GifFile,&Buf, 1) != 1) {
	_GifError = D_GIF_ERR_READ_FAILED;
	return GIF_ERROR;
    }
    if (Buf > 0) {
	*Extension = Private->Buf;           /* Use private unused buffer. */
	(*Extension)[0] = Buf;  /* Pascal strings notation (pos. 0 is len.). */
	if (READ(GifFile,&((*Extension)[1]), Buf) != Buf) {
	    _GifError = D_GIF_ERR_READ_FAILED;
	    return GIF_ERROR;
	}
    }
    else
	*Extension = NULL;

    return GIF_OK;
}

/******************************************************************************
*   This routine should be called last, to close the GIF file.		      *
******************************************************************************/
int DGifCloseFile(GifFileType *GifFile)
{
    GifFilePrivateType *Private;
    FILE *File;

    if (GifFile == NULL) return GIF_ERROR;

    Private = (GifFilePrivateType *) GifFile->Private;

    if (!IS_READABLE(Private)) {
	/* This file was NOT open for reading: */
	_GifError = D_GIF_ERR_NOT_READABLE;
	return GIF_ERROR;
    }

    File = Private->File;

    if (GifFile->Image.ColorMap)
    {
	FreeMapObject(GifFile->Image.ColorMap);
        GifFile->Image.ColorMap = NULL;
    }

    if (GifFile->SColorMap)
    {
	FreeMapObject(GifFile->SColorMap);
	GifFile->SColorMap = NULL;
    }

    if (Private)
    {
	free((char *) Private);
	Private = NULL;
    }

    if (GifFile->SavedImages)
    {
	FreeSavedImages(GifFile);
	//RGL~BUG(The FreeSavedImages only frees GifFile->SavedImages not the entire GifFile structure): GifFile = NULL;
	GifFile->SavedImages= NULL; //RGL+: Correct code
    }

    free(GifFile);

    if ( File && (fclose(File) != 0)) {
	  _GifError = D_GIF_ERR_CLOSE_FAILED;
	  return GIF_ERROR;
    }
    return GIF_OK;
}

/******************************************************************************
*   Get 2 bytes (word) from the given file:				      *
******************************************************************************/
static int DGifGetWord(GifFileType *GifFile, int *Word)
{
    unsigned char c[2];

    if (READ(GifFile,c, 2) != 2) {
	_GifError = D_GIF_ERR_READ_FAILED;
	return GIF_ERROR;
    }

    *Word = (((unsigned int) c[1]) << 8) + c[0];
    return GIF_OK;
}

/******************************************************************************
*   Get the image code in compressed form.  his routine can be called if the  *
* information needed to be piped out as is. Obviously this is much faster     *
* than decoding and encoding again. This routine should be followed by calls  *
* to DGifGetCodeNext, until NULL block is returned.			      *
*   The block should NOT be freed by the user (not dynamically allocated).    *
******************************************************************************/
int DGifGetCode(GifFileType *GifFile, int *CodeSize, GifByteType **CodeBlock)
{
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    if (!IS_READABLE(Private)) {
	/* This file was NOT open for reading: */
	_GifError = D_GIF_ERR_NOT_READABLE;
	return GIF_ERROR;
    }

    *CodeSize = Private->BitsPerPixel;

    return DGifGetCodeNext(GifFile, CodeBlock);
}

/******************************************************************************
*   Continue to get the image code in compressed form. This routine should be *
* called until NULL block is returned.					      *
*   The block should NOT be freed by the user (not dynamically allocated).    *
******************************************************************************/
int DGifGetCodeNext(GifFileType *GifFile, GifByteType **CodeBlock)
{
    GifByteType Buf;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    if (READ(GifFile,&Buf, 1) != 1) {
	_GifError = D_GIF_ERR_READ_FAILED;
	return GIF_ERROR;
    }

    if (Buf > 0) {
	*CodeBlock = Private->Buf;	       /* Use private unused buffer. */
	(*CodeBlock)[0] = Buf;  /* Pascal strings notation (pos. 0 is len.). */
	if (READ(GifFile,&((*CodeBlock)[1]), Buf) != Buf) {
	    _GifError = D_GIF_ERR_READ_FAILED;
	    return GIF_ERROR;
	}
    }
    else {
	*CodeBlock = NULL;
	Private->Buf[0] = 0;		   /* Make sure the buffer is empty! */
	Private->PixelCount = 0;   /* And local info. indicate image read. */
    }

    return GIF_OK;
}

/******************************************************************************
*   Setup the LZ decompression for this image:				      *
******************************************************************************/
static int DGifSetupDecompress(GifFileType *GifFile)
{
    int i, BitsPerPixel;
    GifByteType CodeSize;
    unsigned int *Prefix;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

    READ(GifFile,&CodeSize, 1);    /* Read Code size from file. */
    BitsPerPixel = CodeSize;

    Private->Buf[0] = 0;			      /* Input Buffer empty. */
    Private->BitsPerPixel = BitsPerPixel;
    Private->ClearCode = (1 << BitsPerPixel);
    Private->EOFCode = Private->ClearCode + 1;
    Private->RunningCode = Private->EOFCode + 1;
    Private->RunningBits = BitsPerPixel + 1;	 /* Number of bits per code. */
    Private->MaxCode1 = 1 << Private->RunningBits;     /* Max. code + 1. */
    Private->StackPtr = 0;		    /* No pixels on the pixel stack. */
    Private->LastCode = NO_SUCH_CODE;
    Private->CrntShiftState = 0;	/* No information in CrntShiftDWord. */
    Private->CrntShiftDWord = 0;

    Prefix = Private->Prefix;
    for (i = 0; i <= LZ_MAX_CODE; i++) Prefix[i] = NO_SUCH_CODE;

    return GIF_OK;
}

/******************************************************************************
*   The LZ decompression routine:					      *
*   This version decompress the given gif file into Line of length LineLen.   *
*   This routine can be called few times (one per scan line, for example), in *
* order the complete the whole image.					      *
******************************************************************************/
static int DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line,
								int LineLen)
{
    int i = 0, j, CrntCode, EOFCode, ClearCode, CrntPrefix, LastCode, StackPtr;
    GifByteType *Stack, *Suffix;
    unsigned int *Prefix;
    GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产调教视频一区| 久久一日本道色综合| 另类小说视频一区二区| 国产精品久久久久国产精品日日 | 国产福利不卡视频| 亚洲美女视频一区| 日本一区二区三区在线不卡| 91精品国产91久久久久久一区二区| 国产成人精品网址| 青青青爽久久午夜综合久久午夜| 亚洲精品免费在线| 国产日产欧美一区二区三区| 9191成人精品久久| 色先锋资源久久综合| 欧美精品久久一区二区三区| 99国产精品久久久| 国产成人一级电影| 久久99精品久久久久久国产越南 | 国产精品久久午夜| 久久久久久久综合日本| 欧美一区二区免费| 欧美日韩高清一区二区| 91久久精品日日躁夜夜躁欧美| 国产精品系列在线观看| 国产在线精品国自产拍免费| 日本不卡视频在线观看| 亚洲成人激情av| 一区二区三区四区激情 | 日韩成人av影视| 亚洲蜜臀av乱码久久精品| 中文字幕在线视频一区| 久久久久久久久久久电影| 精品sm捆绑视频| 日韩欧美色综合| 欧美一个色资源| 日韩一区二区麻豆国产| 777亚洲妇女| 91精品欧美一区二区三区综合在| 成人欧美一区二区三区| 一区视频在线播放| 中文字幕在线不卡| 亚洲日本一区二区三区| 国产精品电影一区二区三区| 国产精品区一区二区三区| 国产精品欧美一级免费| 中文字幕在线不卡国产视频| 亚洲日穴在线视频| 亚洲五码中文字幕| 亚洲成人av一区| 亚洲国产精品久久艾草纯爱| 亚洲国产视频直播| 五月天亚洲精品| 免费观看成人鲁鲁鲁鲁鲁视频| 久久精品国产精品青草| 国产精品77777| 成人理论电影网| 91网站最新网址| 欧美日韩一区二区在线观看视频| 欧美性xxxxx极品少妇| 欧美日韩国产成人在线91| 日韩一级视频免费观看在线| 久久久久久久性| 成人免费在线观看入口| 亚洲午夜在线观看视频在线| 蜜臀av性久久久久av蜜臀妖精 | 亚洲福利一区二区三区| 天天免费综合色| 国产自产2019最新不卡| www.亚洲精品| 欧美久久久久久久久中文字幕| 日韩欧美精品在线视频| 日本一区二区成人| 亚洲一区在线视频观看| 久久国产视频网| 99视频国产精品| 欧美军同video69gay| 337p日本欧洲亚洲大胆精品| 自拍偷在线精品自拍偷无码专区| 亚洲国产va精品久久久不卡综合 | 国产乱人伦偷精品视频免下载| 成人av网站免费| 精品污污网站免费看| 久久美女高清视频| 亚洲一区电影777| 国产风韵犹存在线视精品| 欧洲国产伦久久久久久久| 欧美xxxxx裸体时装秀| 国产精品久久久久久福利一牛影视 | 中文字幕一区二区三区不卡在线 | 成人激情av网| 91.com视频| 亚洲欧美日韩小说| 精一区二区三区| 欧美在线你懂的| 国产欧美精品国产国产专区| 日韩不卡一区二区| 色噜噜狠狠色综合中国| 国产色产综合色产在线视频| 91成人在线观看喷潮| 26uuu色噜噜精品一区| 亚洲在线视频网站| 成人黄色小视频| 日韩一级成人av| 亚洲综合免费观看高清在线观看| 国产一区二区三区电影在线观看| 欧美日韩国产电影| 一区二区三区免费网站| 成人午夜视频免费看| 精品国产污污免费网站入口| 亚洲午夜激情网站| 色综合咪咪久久| 中文字幕不卡一区| 国产一区激情在线| 欧美一区二区三区影视| 又紧又大又爽精品一区二区| 国产成人亚洲综合a∨婷婷图片| 日韩亚洲欧美在线| 亚洲va欧美va人人爽| 色综合色综合色综合| 欧美国产精品中文字幕| 国产一区二区三区电影在线观看| 日韩三级视频中文字幕| 日韩专区中文字幕一区二区| 色老汉av一区二区三区| 中文字幕在线播放不卡一区| 一区二区三区免费观看| 久久综合国产精品| 欧美一区二区三区系列电影| 亚洲大片免费看| 欧美性欧美巨大黑白大战| 一区二区三区在线观看国产| 91视频国产资源| 国产精品超碰97尤物18| 波多野结衣在线一区| 国产精品色哟哟| www.欧美亚洲| 国产精品久久久久一区二区三区| 国产98色在线|日韩| 欧美国产欧美综合| 99久久er热在这里只有精品15| 中文字幕亚洲在| 一道本成人在线| 亚洲午夜久久久久| 欧美人xxxx| 麻豆久久久久久| 久久综合成人精品亚洲另类欧美 | 在线观看亚洲精品| 亚洲成a人片综合在线| 在线观看91精品国产麻豆| 日韩av电影免费观看高清完整版 | 日本大胆欧美人术艺术动态| 7799精品视频| 国产在线国偷精品产拍免费yy| 久久久久久久久免费| 国产99久久精品| 亚洲天堂精品视频| 欧美色窝79yyyycom| 日韩av在线发布| 精品国一区二区三区| 国产成人av一区二区三区在线| 亚洲国产经典视频| 日本久久一区二区| 欧美aaa在线| 国产欧美视频在线观看| 91在线视频网址| 一区二区不卡在线视频 午夜欧美不卡在 | 一区二区三区精品视频在线| 欧美日韩国产高清一区二区三区 | 9久草视频在线视频精品| 亚洲一区二区在线免费看| 91精品国产色综合久久不卡蜜臀| 久久99精品国产.久久久久久| 中文天堂在线一区| 在线观看亚洲精品视频| 久久国产婷婷国产香蕉| 亚洲欧洲另类国产综合| 欧美人动与zoxxxx乱| 国产精品911| 亚洲国产综合色| 久久久久久久久久久电影| 色综合中文字幕国产| 五月激情综合婷婷| 欧美国产丝袜视频| 欧美三级视频在线| 国产成a人亚洲| 亚欧色一区w666天堂| 欧美精彩视频一区二区三区| 69堂精品视频| av电影天堂一区二区在线| 日本va欧美va瓶| 亚洲色图视频网站| 2014亚洲片线观看视频免费| 在线视频国内一区二区| 国产自产高清不卡| 日韩—二三区免费观看av| 中文字幕一区二区三区乱码在线| 欧美成人艳星乳罩| 欧美日韩综合在线免费观看| 成人免费三级在线| 久久99精品久久久|