亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
色综合久久久久综合99| 日本不卡高清视频| 国产欧美日韩卡一| 亚洲精品一区二区三区影院| 欧美女孩性生活视频| 91精品国产综合久久精品app| 欧洲人成人精品| 欧美高清性hdvideosex| 制服丝袜一区二区三区| 另类小说图片综合网| 日本欧美加勒比视频| 奇米888四色在线精品| 国产一区二区在线视频| 国产精品1024| 在线欧美日韩精品| 欧美探花视频资源| 欧美一级精品大片| 国产精品污网站| 亚洲综合丝袜美腿| 奇米色一区二区| 成人av高清在线| 亚洲国产精品久久艾草纯爱| 日韩精品欧美精品| 国产成a人亚洲精| 91福利社在线观看| 亚洲精品一区二区三区影院| 中文字幕制服丝袜一区二区三区 | 国产精品久久久久久久久久免费看 | 久久综合久久99| 国产精品丝袜黑色高跟| 亚洲综合色区另类av| 精品在线你懂的| 色综合久久中文字幕| 欧美一区二区三区在线观看| 国产精品美女久久福利网站| 亚洲成人你懂的| 成人高清免费观看| 欧美一级爆毛片| 亚洲天堂网中文字| 国产精品少妇自拍| 青青青爽久久午夜综合久久午夜| 成人精品免费看| 91精品免费在线| 欧美极品少妇xxxxⅹ高跟鞋| 日日夜夜免费精品| 99精品欧美一区二区蜜桃免费 | 久久精品国产77777蜜臀| 国产一区二区视频在线播放| 色婷婷av久久久久久久| 久久亚洲一区二区三区四区| 3d动漫精品啪啪| 最新成人av在线| 丁香婷婷综合五月| 亚洲精品一区在线观看| 日本亚洲视频在线| 欧美日韩亚洲综合一区 | 中文字幕一区二区在线播放| 免费人成黄页网站在线一区二区| 成人一区二区三区中文字幕| 日韩欧美123| 日本vs亚洲vs韩国一区三区二区 | 欧美激情一区二区三区蜜桃视频| 日本欧美肥老太交大片| 欧美日韩国产综合一区二区| 亚洲精品乱码久久久久久| 成人深夜福利app| 国产丝袜美腿一区二区三区| 久久精品国产99国产精品| 欧美猛男gaygay网站| 亚洲高清中文字幕| 91成人国产精品| 一区二区三区加勒比av| 91视频国产观看| 亚洲欧美日韩国产另类专区| 不卡一二三区首页| 中文字幕综合网| 91成人看片片| 婷婷夜色潮精品综合在线| 欧美视频一区二区在线观看| 亚洲国产综合色| 欧美日韩精品一区二区三区| 天天综合色天天| 日韩欧美亚洲一区二区| 激情综合色播五月| 欧美—级在线免费片| www.欧美精品一二区| 亚洲欧洲日韩在线| 欧美色大人视频| 久久国产尿小便嘘嘘| 久久亚洲欧美国产精品乐播| 成人免费va视频| 一区二区三区国产| 精品欧美久久久| 岛国av在线一区| 一区二区在线观看免费视频播放| 欧美无砖专区一中文字| 日韩精品91亚洲二区在线观看| 精品免费视频一区二区| 成人丝袜18视频在线观看| 一区二区在线看| 亚洲精品在线观| 91激情在线视频| 麻豆91在线观看| 亚洲欧美在线观看| 美女视频网站久久| 中文无字幕一区二区三区| 一本大道av伊人久久综合| 午夜私人影院久久久久| 久久蜜桃av一区二区天堂| 99久久国产免费看| 精品国产露脸精彩对白| 不卡大黄网站免费看| 性做久久久久久久免费看| xnxx国产精品| 欧美少妇bbb| 成人小视频免费在线观看| 亚洲成av人片在线| 国产精品麻豆视频| 91麻豆精品国产91久久久久 | 亚洲图片激情小说| 日韩精品中午字幕| 在线精品亚洲一区二区不卡| 国产欧美日韩在线| 91精品国产福利| 在线观看av不卡| av影院午夜一区| 国产麻豆精品theporn| 亚洲影视资源网| 中文字幕人成不卡一区| 精品国产乱码久久久久久影片| 欧美在线999| 99精品国产一区二区三区不卡| 国产一区二区三区免费看| 洋洋av久久久久久久一区| 国产精品久久久久影院色老大| 欧美精品一区二区三区高清aⅴ| 亚洲成a人在线观看| 中文字幕日韩一区| 国产亚洲精久久久久久| 欧美成va人片在线观看| 欧美一区二区在线播放| 欧美无乱码久久久免费午夜一区| 99久久99久久久精品齐齐| 成人黄色免费短视频| 国产综合色视频| 黑人巨大精品欧美一区| 免费观看日韩av| 奇米亚洲午夜久久精品| 日韩激情一二三区| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩精品乱码免费| 免费一区二区视频| 免费在线观看视频一区| 男女性色大片免费观看一区二区 | 日韩avvvv在线播放| 亚洲国产精品影院| 亚洲电影你懂得| 水蜜桃久久夜色精品一区的特点| 日韩精品一级中文字幕精品视频免费观看 | 欧美videos中文字幕| 日韩欧美www| 久久精品视频免费| 国产精品热久久久久夜色精品三区| 2023国产一二三区日本精品2022| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产毛片一区二区| 国产美女视频一区| av电影一区二区| 欧美日韩黄色一区二区| 日韩精品中文字幕一区二区三区| 精品国产精品网麻豆系列| 久久久久久久久久看片| 欧美韩国一区二区| 亚洲另类在线一区| 日本伊人色综合网| 国产成人精品一区二区三区网站观看| 懂色中文一区二区在线播放| 91香蕉视频mp4| 欧美一区二区三区婷婷月色 | 成人美女在线观看| 视频一区二区不卡| 国产成人在线视频网站| av电影在线观看一区| 制服丝袜国产精品| 亚洲国产成人私人影院tom| 亚洲免费在线播放| 欧美国产禁国产网站cc| 亚洲精品成人悠悠色影视| 亚洲123区在线观看| 成人精品在线视频观看| 在线播放视频一区| 国产精品电影院| 久久国产夜色精品鲁鲁99| 91亚洲国产成人精品一区二区三 | 精品中文av资源站在线观看| 99精品久久久久久| 久久久五月婷婷| 午夜免费久久看| 91一区在线观看| 久久精品夜色噜噜亚洲a∨|