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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gifalloc.c

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? C
字號:
/******************************************************************************   "Gif-Lib" - Yet another gif library.				     **									     ** Written by:  Gershon Elber				Ver 0.1, Jun. 1989   ** Extensively hacked by: Eric S. Raymond		Ver 1.?, Sep 1992    ******************************************************************************** GIF construction tools						      ******************************************************************************** History:								     ** 15 Sep 92 - Version 1.0 by Eric Raymond.				     ******************************************************************************/#include <stdlib.h>#include <stdio.h>#include <string.h>#include "gif_lib.h"#define MAX(x, y)	(((x) > (y)) ? (x) : (y))/******************************************************************************* Miscellaneous utility functions					      *******************************************************************************/int BitSize(int n)/* return smallest bitfield size n will fit in */{    register int i;    for (i = 1; i <= 8; i++)	if ((1 << i) >= n)	    break;    return(i);}/******************************************************************************* Color map object functions						      *******************************************************************************/ColorMapObject *MakeMapObject(int ColorCount, GifColorType *ColorMap)/* * Allocate a color map of given size; initialize with contents of * ColorMap if that pointer is non-NULL. */{    ColorMapObject *Object;    if (ColorCount != (1 << BitSize(ColorCount)))	return((ColorMapObject *)NULL);    Object = (ColorMapObject *)malloc(sizeof(ColorMapObject));    if (Object == (ColorMapObject *)NULL)	return((ColorMapObject *)NULL);    Object->Colors = (GifColorType *)calloc(ColorCount, sizeof(GifColorType));    if (Object->Colors == (GifColorType *)NULL)	return((ColorMapObject *)NULL);    Object->ColorCount = ColorCount;    Object->BitsPerPixel = BitSize(ColorCount);    if (ColorMap)	memcpy((char *)Object->Colors,	       (char *)ColorMap, ColorCount * sizeof(GifColorType));    return(Object);}void FreeMapObject(ColorMapObject *Object)/* * Free a color map object */{    free(Object->Colors);    free(Object);}#ifdef DEBUGvoid DumpColorMap(ColorMapObject *Object, FILE *fp){    if (Object)    {	int i, j, Len = Object->ColorCount;	for (i = 0; i < Len; i+=4) {	    for (j = 0; j < 4 && j < Len; j++) {		fprintf(fp,			"%3d: %02x %02x %02x   ", i + j,		       Object->Colors[i + j].Red,		       Object->Colors[i + j].Green,		       Object->Colors[i + j].Blue);	    }	    fprintf(fp, "\n");	}    }}#endif /* DEBUG */ColorMapObject *UnionColorMap(			 ColorMapObject *ColorIn1,			 ColorMapObject *ColorIn2,			 GifPixelType ColorTransIn2[])/* * Compute the union of two given color maps and return it.  If result can't  * fit into 256 colors, NULL is returned, the allocated union otherwise. * ColorIn1 is copied as is to ColorUnion, while colors from ColorIn2 are * copied iff they didn't exist before.  ColorTransIn2 maps the old * ColorIn2 into ColorUnion color map table. */{    int i, j, CrntSlot, RoundUpTo, NewBitSize;    ColorMapObject *ColorUnion;    /*     * Allocate table which will hold the result for sure.     */    ColorUnion	= MakeMapObject(MAX(ColorIn1->ColorCount,ColorIn2->ColorCount)*2,NULL);    if (ColorUnion == NULL)	return(NULL);    /* Copy ColorIn1 to ColorUnionSize; */    for (i = 0; i < ColorIn1->ColorCount; i++)	ColorUnion->Colors[i] = ColorIn1->Colors[i];    CrntSlot = ColorIn1->ColorCount;    /*     * Potentially obnoxious hack:     *     * Back CrntSlot down past all contiguous {0, 0, 0} slots at the end     * of table 1.  This is very useful if your display is limited to     * 16 colors.     */    while (ColorIn1->Colors[CrntSlot-1].Red == 0	   && ColorIn1->Colors[CrntSlot-1].Green == 0	   && ColorIn1->Colors[CrntSlot-1].Red == 0)	CrntSlot--;    /* Copy ColorIn2 to ColorUnionSize (use old colors if they exist): */    for (i = 0; i < ColorIn2->ColorCount && CrntSlot<=256; i++)    {	/* Let's see if this color already exists: */	for (j = 0; j < ColorIn1->ColorCount; j++)	    if (memcmp(&ColorIn1->Colors[j], &ColorIn2->Colors[i], sizeof(GifColorType)) == 0)		break;	if (j < ColorIn1->ColorCount)	    ColorTransIn2[i] = j;	/* color exists in Color1 */	else	{	    /* Color is new - copy it to a new slot: */	    ColorUnion->Colors[CrntSlot] = ColorIn2->Colors[i];	    ColorTransIn2[i] = CrntSlot++;	}    }    if (CrntSlot > 256)    {	FreeMapObject(ColorUnion);	return((ColorMapObject *)NULL);    }    NewBitSize = BitSize(CrntSlot);    RoundUpTo = (1 << NewBitSize);    if (RoundUpTo != ColorUnion->ColorCount)    {	register GifColorType	*Map = ColorUnion->Colors;	/*	 * Zero out slots up to next power of 2.	 * We know these slots exist because of the way ColorUnion's	 * start dimension was computed.	 */	for (j = CrntSlot; j < RoundUpTo; j++)	    Map[j].Red = Map[j].Green = Map[j].Blue = 0;	/* perhaps we can shrink the map? */	if (RoundUpTo < ColorUnion->ColorCount)	    ColorUnion->Colors 		= (GifColorType *)realloc(Map, sizeof(GifColorType)*RoundUpTo);    }    ColorUnion->ColorCount = RoundUpTo;    ColorUnion->BitsPerPixel = NewBitSize;    return(ColorUnion);}void ApplyTranslation(SavedImage *Image, GifPixelType Translation[])/* * Apply a given color translation to the raster bits of an image */{    register int i;    register int RasterSize = Image->ImageDesc.Height * Image->ImageDesc.Width;    for (i = 0; i < RasterSize; i++)	Image->RasterBits[i] = Translation[(int)Image->RasterBits[i]];}/******************************************************************************* Extension record functions						      *******************************************************************************/void MakeExtension(SavedImage *New, int Function){    New->Function = Function;    /*     * Someday we might have to deal with multiple extensions.     */}int AddExtensionBlock(SavedImage *New, int Len, char ExtData[]){    ExtensionBlock	*ep;    if (New->ExtensionBlocks == NULL)	New->ExtensionBlocks = (ExtensionBlock *)malloc(sizeof(ExtensionBlock));    else	New->ExtensionBlocks =	    (ExtensionBlock *)realloc(New->ExtensionBlocks,		      sizeof(ExtensionBlock) * (New->ExtensionBlockCount + 1));    if (New->ExtensionBlocks == NULL)	return(GIF_ERROR);    ep = &New->ExtensionBlocks[New->ExtensionBlockCount++];    if ((ep->Bytes = (char *)malloc(ep->ByteCount = Len)) == NULL)	return(GIF_ERROR);    if (ExtData) {	    memcpy(ep->Bytes, ExtData, Len);        ep->Function = New->Function;    }    return(GIF_OK);}void FreeExtension(SavedImage *Image){    ExtensionBlock	*ep;    for (ep = Image->ExtensionBlocks;	 ep < Image->ExtensionBlocks + Image->ExtensionBlockCount;	 ep++)	(void) free((char *)ep->Bytes);    free((char *)Image->ExtensionBlocks);    Image->ExtensionBlocks = NULL;}/******************************************************************************* Image block allocation functions					      *******************************************************************************/SavedImage *MakeSavedImage(GifFileType *GifFile, SavedImage *CopyFrom)/* * Append an image block to the SavedImages array   */{    SavedImage	*sp;    if (GifFile->SavedImages == NULL)	GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));    else	GifFile->SavedImages = (SavedImage *)realloc(GifFile->SavedImages,				sizeof(SavedImage) * (GifFile->ImageCount+1));    if (GifFile->SavedImages == NULL)	return((SavedImage *)NULL);    else    {	sp = &GifFile->SavedImages[GifFile->ImageCount++];	memset((char *)sp, '\0', sizeof(SavedImage));	if (CopyFrom)	{	    memcpy((char *)sp, CopyFrom, sizeof(SavedImage));	    /*	     * Make our own allocated copies of the heap fields in the	     * copied record.  This guards against potential aliasing	     * problems.	     */	    /* first, the local color map */	    if (sp->ImageDesc.ColorMap)		sp->ImageDesc.ColorMap =		    MakeMapObject(CopyFrom->ImageDesc.ColorMap->ColorCount,				  CopyFrom->ImageDesc.ColorMap->Colors);	    /* next, the raster */	    sp->RasterBits = (char *)malloc(sizeof(GifPixelType)				* CopyFrom->ImageDesc.Height				* CopyFrom->ImageDesc.Width);	    memcpy(sp->RasterBits,		   CopyFrom->RasterBits,		   sizeof(GifPixelType)			* CopyFrom->ImageDesc.Height			* CopyFrom->ImageDesc.Width);	    /* finally, the extension blocks */	    if (sp->ExtensionBlocks)	    {		sp->ExtensionBlocks		    = (ExtensionBlock*)malloc(sizeof(ExtensionBlock)					      * CopyFrom->ExtensionBlockCount);		memcpy(sp->ExtensionBlocks,		   CopyFrom->ExtensionBlocks,		   sizeof(ExtensionBlock)		   	* CopyFrom->ExtensionBlockCount);		/*		 * For the moment, the actual blocks can take their		 * chances with free().  We'll fix this later. 		 */	    }	}	return(sp);    }}void FreeSavedImages(GifFileType *GifFile){    SavedImage	*sp;    for (sp = GifFile->SavedImages;	 sp < GifFile->SavedImages + GifFile->ImageCount;	 sp++)    {	if (sp->ImageDesc.ColorMap)	    FreeMapObject(sp->ImageDesc.ColorMap);	if (sp->RasterBits)	    free((char *)sp->RasterBits);	if (sp->ExtensionBlocks)	    FreeExtension(sp);    }    free((char *) GifFile->SavedImages);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人欧美一区二区三区黑人麻豆| 7777精品伊人久久久大香线蕉完整版 | 欧美精品欧美精品系列| 成人午夜在线视频| 国产成人99久久亚洲综合精品| 丝袜国产日韩另类美女| 亚洲视频小说图片| 中文久久乱码一区二区| 久久亚洲捆绑美女| 欧美肥妇bbw| 777xxx欧美| 欧美日韩三级视频| 欧美日韩一区二区不卡| 欧美在线你懂得| 欧美日韩亚洲另类| 欧美日本高清视频在线观看| 欧美日韩另类一区| 日韩区在线观看| 欧美精品一区二区久久婷婷| 精品欧美久久久| 国产精品乱码人人做人人爱| 精品国产伦理网| 日韩亚洲欧美高清| 久久综合久久久久88| 国产三级精品视频| 国产精品盗摄一区二区三区| 国产精品国产三级国产a| 一级日本不卡的影视| 五月天欧美精品| 久久66热偷产精品| 国产成人精品一区二区三区四区| 从欧美一区二区三区| 色视频欧美一区二区三区| 欧美一区二区国产| 中文字幕国产一区| 人妖欧美一区二区| 成人a区在线观看| 欧美日韩亚洲国产综合| 91精品免费在线观看| 久久久久国产精品厨房| 一区二区三区欧美日韩| 蜜桃一区二区三区在线观看| av电影一区二区| 欧美一级欧美三级在线观看| 欧美国产日韩精品免费观看| 亚洲午夜精品一区二区三区他趣| 欧美最新大片在线看| 欧美韩日一区二区三区四区| 一区二区三区产品免费精品久久75| 激情综合网最新| 欧美日韩一区不卡| 国产精品久久久久久一区二区三区| 偷偷要91色婷婷| 日本一区二区成人| 亚洲午夜精品网| 欧美日韩一区二区三区高清| 午夜激情综合网| www亚洲一区| 一区二区三区在线播| 国产成人精品免费在线| 欧美日韩你懂得| 亚洲一区av在线| av亚洲精华国产精华| 日韩一区二区不卡| 亚洲一二三四久久| 97久久超碰国产精品| 久久婷婷综合激情| 激情六月婷婷综合| 欧美国产激情二区三区| 国产精品系列在线观看| 国产精品每日更新在线播放网址| 99热精品国产| 蜜臀a∨国产成人精品| 26uuu精品一区二区在线观看| 成人性生交大片免费看视频在线| 久久精品一区四区| kk眼镜猥琐国模调教系列一区二区| 国产精品免费av| 91丝袜美腿高跟国产极品老师| 综合激情成人伊人| 欧美一区二区网站| 国产一区二区三区四区五区美女| 国产欧美精品日韩区二区麻豆天美| 成人a免费在线看| 免费久久精品视频| 亚洲免费毛片网站| 日本道色综合久久| 亚洲人成在线播放网站岛国| 精品电影一区二区| 日韩免费视频线观看| 欧美一二三四在线| 色菇凉天天综合网| 奇米一区二区三区av| 日本一区二区成人| 精品免费国产二区三区| 在线影院国内精品| a在线播放不卡| 九九**精品视频免费播放| 亚洲精品免费视频| 国产偷v国产偷v亚洲高清| 99在线精品免费| 国产精品亚洲第一| 免费成人在线观看| 亚洲第一av色| 亚洲二区在线视频| 午夜激情久久久| 国产精品乱人伦中文| 欧美一区二区三区视频免费 | 色综合久久88色综合天天| 国产一区二区不卡在线| 狠狠色丁香婷综合久久| 丝袜亚洲另类欧美综合| 亚洲黄色尤物视频| 国产精品日日摸夜夜摸av| 久久你懂得1024| 精品国产99国产精品| 日韩欧美区一区二| 日韩欧美在线1卡| 91精品国产综合久久精品| 欧美主播一区二区三区美女| 欧美亚洲愉拍一区二区| 欧美一级黄色片| 久久品道一品道久久精品| 国产午夜精品美女毛片视频| 日韩精品最新网址| 日本一二三四高清不卡| 久久婷婷久久一区二区三区| 26uuu亚洲综合色欧美| 精品国产第一区二区三区观看体验| 欧美日韩成人一区| 日韩欧美激情四射| 久久网站最新地址| 国产精品成人免费在线| 狠狠v欧美v日韩v亚洲ⅴ| 蜜桃视频在线观看一区二区| 亚洲国产精品av| 亚洲伊人色欲综合网| 日本大胆欧美人术艺术动态| 国产毛片精品国产一区二区三区| 国产91精品入口| 欧美久久久影院| 成人免费一区二区三区在线观看| 亚洲精品乱码久久久久久黑人 | 91亚洲国产成人精品一区二三 | 亚洲欧美在线高清| 天堂蜜桃91精品| 日本一区中文字幕| 国产精品18久久久久久久久| 色综合中文字幕国产| 欧美日韩不卡在线| 国产精品国产三级国产aⅴ原创| 亚洲激情自拍视频| 国产高清精品久久久久| 91久久人澡人人添人人爽欧美| 日韩欧美视频一区| 一区二区三区四区乱视频| 国产精品亚洲а∨天堂免在线| 日本韩国欧美一区| 亚洲视频你懂的| 成熟亚洲日本毛茸茸凸凹| 精品久久久久一区二区国产| 午夜精品久久久久影视| 色婷婷综合视频在线观看| 自拍偷拍国产精品| 99久久精品免费| 亚洲视频图片小说| 91色.com| 亚洲一区二区三区在线看| 日本二三区不卡| 亚洲欧美日韩国产手机在线| 成人av网站免费观看| 国产精品私人自拍| 91蝌蚪porny成人天涯| 一区二区三区精品久久久| 97精品国产97久久久久久久久久久久| 国产欧美视频一区二区| 丁香亚洲综合激情啪啪综合| 亚洲人午夜精品天堂一二香蕉| 粉嫩高潮美女一区二区三区| 国产亚洲欧美日韩在线一区| 国产高清在线精品| 中文字幕精品一区二区三区精品 | 欧美在线看片a免费观看| 亚洲人成精品久久久久| 欧美图区在线视频| 久久99精品国产麻豆婷婷| 久久久久国产免费免费| 色综合久久九月婷婷色综合| 日韩av一区二区三区四区| 久久精品亚洲精品国产欧美| 91社区在线播放| 毛片av中文字幕一区二区| 欧美激情一区不卡| 91久久奴性调教| 狠狠色狠狠色综合日日91app| 国产精品国产三级国产普通话三级| 在线观看欧美日本| 风间由美一区二区av101| 亚洲妇熟xx妇色黄| 亚洲视频中文字幕|