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

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

?? winimage.cpp

?? smartphone 監(jiān)聽電源狀態(tài)源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

// ****************************************************************************
// * LoadGIF                                                                  *
// *   Load a GIF File into the C_ImageSet object                             *
// *                        (c) Nov 2000, Juan Soulie <jsoulie@cplusplus.com> *
// ****************************************************************************
int C_ImageSet::LoadGIF (char * szFileName)
{
	int n;

	// Global GIF variables:
	int GlobalBPP;						// Bits per Pixel.
	COLOR * GlobalColorMap;				// Global colormap (allocate)

	struct GIFGCEtag {				// GRAPHIC CONTROL EXTENSION
		unsigned char BlockSize;		// Block Size: 4 bytes
		unsigned char PackedFields;		// Packed Fields. Bits detail:
										//    0: Transparent Color Flag
										//    1: User Input Flag
										//  2-4: Disposal Method
		unsigned short Delay;			// Delay Time (1/100 seconds)
		unsigned char Transparent;		// Transparent Color Index
	} gifgce;
	int GraphicExtensionFound = 0;

	// OPEN FILE
	ifstream giffile (szFileName,ios::in|ios::_Nocreate|ios::binary);
	if (!giffile.is_open()) {ERRORMSG("File not found");return 0;}

	// *1* READ HEADER (SIGNATURE + VERSION)
	char szSignature[6];				// First 6 bytes (GIF87a or GIF89a)
	giffile.read(szSignature,6);
	if ( memcmp(szSignature,"GIF",2) != 0)
		{ ERRORMSG("Not a GIF File"); return 0; }

	// *2* READ LOGICAL SCREEN DESCRIPTOR
	struct GIFLSDtag {
		unsigned short ScreenWidth;		// Logical Screen Width
		unsigned short ScreenHeight;	// Logical Screen Height
		unsigned char PackedFields;		// Packed Fields. Bits detail:
										//  0-2: Size of Global Color Table
										//    3: Sort Flag
										//  4-6: Color Resolution
										//    7: Global Color Table Flag
		unsigned char Background;		// Background Color Index
		unsigned char PixelAspectRatio;	// Pixel Aspect Ratio
	} giflsd;

	giffile.read((char*)&giflsd,sizeof(giflsd));

	GlobalBPP = (giflsd.PackedFields & 0x07) + 1;

	// fill some animation data:
	FrameWidth = giflsd.ScreenWidth;
	FrameHeight = giflsd.ScreenHeight;
	nLoops = 0;



	// *3* READ/GENERATE GLOBAL COLOR MAP
	GlobalColorMap = new COLOR [1<<GlobalBPP];
	if (giflsd.PackedFields & 0x80)	// File has global color map?
		for (n=0;n< 1<<GlobalBPP;n++)
		{
			GlobalColorMap[n].r=giffile.get();
			GlobalColorMap[n].g=giffile.get();
			GlobalColorMap[n].b=giffile.get();
		}

	else	// GIF standard says to provide an internal default Palette:
		for (n=0;n<256;n++)
			GlobalColorMap[n].r=GlobalColorMap[n].g=GlobalColorMap[n].b=n;

	// *4* NOW WE HAVE 3 POSSIBILITIES:
	//  4a) Get and Extension Block (Blocks with additional information)
	//  4b) Get an Image Separator (Introductor to an image)
	//  4c) Get the trailer Char (End of GIF File)
	do
	{
		int charGot = giffile.get();

		if (charGot == 0x21)		// *A* EXTENSION BLOCK 
		{
			switch (giffile.get())
			{

			case 0xF9:			// Graphic Control Extension

				giffile.read((char*)&gifgce,sizeof(gifgce));
				GraphicExtensionFound++;
				giffile.get(); // Block Terminator (always 0)
				break;

			case 0xFE:			// Comment Extension: Ignored
			case 0x01:			// PlainText Extension: Ignored
			case 0xFF:			// Application Extension: Ignored
			default:			// Unknown Extension: Ignored
				// read (and ignore) data sub-blocks
				while (int nBlockLength = giffile.get())
					for (n=0;n<nBlockLength;n++) giffile.get();
				break;
			}
		}


		else if (charGot == 0x2c) {	// *B* IMAGE (0x2c Image Separator)

			// Create a new Image Object:
			C_Image* NextImage;
			NextImage = new C_Image;

			// Read Image Descriptor
			struct GIFIDtag {	
				unsigned short xPos;			// Image Left Position
				unsigned short yPos;			// Image Top Position
				unsigned short Width;			// Image Width
				unsigned short Height;			// Image Height
				unsigned char PackedFields;		// Packed Fields. Bits detail:
											//  0-2: Size of Local Color Table
											//  3-4: (Reserved)
											//    5: Sort Flag
											//    6: Interlace Flag
											//    7: Local Color Table Flag
			} gifid;

			giffile.read((char*)&gifid, sizeof(gifid));

			int LocalColorMap = (gifid.PackedFields & 0x08)? 1 : 0;

			NextImage->Init (gifid.Width, gifid.Height,
				LocalColorMap ? (gifid.PackedFields&7)+1 : GlobalBPP);

			// Fill NextImage Data
			NextImage->xPos = gifid.xPos;
			NextImage->yPos = gifid.yPos;
			if (GraphicExtensionFound)
			{
				NextImage->Transparent=
					(gifgce.PackedFields&0x01) ? gifgce.Transparent : -1;
				NextImage->Transparency=
					(gifgce.PackedFields&0x1c)>1 ? 1 : 0;
				NextImage->Delay = gifgce.Delay*10;
			}
		
			if (LocalColorMap)		// Read Color Map (if descriptor says so)
				giffile.read((char*)NextImage->Palette,
					sizeof(COLOR)*(1<<NextImage->BPP));

			else					// Otherwise copy Global
				memcpy (NextImage->Palette, GlobalColorMap,
					sizeof(COLOR)*(1<<NextImage->BPP));

			short firstbyte=giffile.get();	// 1st byte of img block (CodeSize)

			// Calculate compressed image block size
				// to fix: this allocates an extra byte per block
			long ImgStart,ImgEnd;				
			ImgEnd = ImgStart = giffile.tellg();
			while (n=giffile.get()) giffile.seekg (ImgEnd+=n+1);
			giffile.seekg (ImgStart);

			// Allocate Space for Compressed Image
			char * pCompressedImage = new char [ImgEnd-ImgStart+4];
  
			// Read and store Compressed Image
			char * pTemp = pCompressedImage;
			while (int nBlockLength = giffile.get())
			{
				giffile.read(pTemp,nBlockLength);
				pTemp+=nBlockLength;
			}

			// Call LZW/GIF decompressor
			n=LZWDecoder(
				(char*) pCompressedImage,
				(char*) NextImage->Raster,
				firstbyte, NextImage->BytesPerRow,//NextImage->AlignedWidth,
				gifid.Width, gifid.Height,
				((gifid.PackedFields & 0x40)?1:0)	//Interlaced?
				);

			if (n)
				AddImage(NextImage);
			else
			{
				delete NextImage;
				ERRORMSG("GIF File Corrupt");
			}

			// Some cleanup
			delete[]pCompressedImage;
			GraphicExtensionFound=0;
		}


		else if (charGot == 0x3b) {	// *C* TRAILER: End of GIF Info
			break; // Ok. Standard End.
		}

	} while (giffile.good());

	giffile.close();
	if (nImages==0) ERRORMSG("Premature End Of File");

	if(GlobalColorMap){
		delete []GlobalColorMap;
	}
	return nImages;
}

// ****************************************************************************
// * LZWDecoder (C/C++)                                                       *
// * Codec to perform LZW (GIF Variant) decompression.                        *
// *                         (c) Nov2000, Juan Soulie <jsoulie@cplusplus.com> *
// ****************************************************************************
//
// Parameter description:
//  - bufIn: Input buffer containing a "de-blocked" GIF/LZW compressed image.
//  - bufOut: Output buffer where result will be stored.
//  - InitCodeSize: Initial CodeSize to be Used
//    (GIF files include this as the first byte in a picture block)
//  - AlignedWidth : Width of a row in memory (including alignment if needed)
//  - Width, Height: Physical dimensions of image.
//  - Interlace: 1 for Interlaced GIFs.
//
int LZWDecoder (char * bufIn, char * bufOut,
				short InitCodeSize, int AlignedWidth,
				int Width, int Height, const int Interlace)
{
	int n;
	int row=0,col=0;				// used to point output if Interlaced
	int nPixels, maxPixels;			// Output pixel counter

	short CodeSize;					// Current CodeSize (size in bits of codes)
	short ClearCode;				// Clear code : resets decompressor
	short EndCode;					// End code : marks end of information

	long whichBit;					// Index of next bit in bufIn
	long LongCode;					// Temp. var. from which Code is retrieved
	short Code;						// Code extracted
	short PrevCode;					// Previous Code
	short OutCode;					// Code to output

	// Translation Table:
	short Prefix[4096];				// Prefix: index of another Code
	unsigned char Suffix[4096];		// Suffix: terminating character
	short FirstEntry;				// Index of first free entry in table
	short NextEntry;				// Index of next free entry in table

	unsigned char OutStack[4097];	// Output buffer
	int OutIndex;					// Characters in OutStack

	int RowOffset;					// Offset in output buffer for current row

	// Set up values that depend on InitCodeSize Parameter.
	CodeSize = InitCodeSize+1;
	ClearCode = (1 << InitCodeSize);
	EndCode = ClearCode + 1;
	NextEntry = FirstEntry = ClearCode + 2;

	whichBit=0;
	nPixels = 0;
	maxPixels = Width*Height;
	RowOffset =0;

	while (nPixels<maxPixels) {
		OutIndex = 0;							// Reset Output Stack

		// GET NEXT CODE FROM bufIn:
		// LZW compression uses code items longer than a single byte.
		// For GIF Files, code sizes are variable between 9 and 12 bits 
		// That's why we must read data (Code) this way:
		memcpy(&LongCode,((long*)(bufIn+whichBit/8)),sizeof(long));
//		LongCode=*;	// Get some bytes from bufIn
		LongCode>>=(whichBit&7);				// Discard too low bits
		Code =(LongCode & ((1<<CodeSize)-1) );	// Discard too high bits
		whichBit += CodeSize;					// Increase Bit Offset

		// SWITCH, DIFFERENT POSIBILITIES FOR CODE:
		if (Code == EndCode)					// END CODE
			break;								// Exit LZW Decompression loop

		if (Code == ClearCode) {				// CLEAR CODE:
			CodeSize = InitCodeSize+1;			// Reset CodeSize
			NextEntry = FirstEntry;				// Reset Translation Table
			PrevCode=Code;				// Prevent next to be added to table.
			continue;							// restart, to get another code
		}
		if (Code < NextEntry)					// CODE IS IN TABLE
			OutCode = Code;						// Set code to output.

		else {									// CODE IS NOT IN TABLE:
			OutIndex++;			// Keep "first" character of previous output.
			OutCode = PrevCode;					// Set PrevCode to be output
		}

		// EXPAND OutCode IN OutStack
		// - Elements up to FirstEntry are Raw-Codes and are not expanded
		// - Table Prefices contain indexes to other codes
		// - Table Suffices contain the raw codes to be output
		while (OutCode >= FirstEntry) {
			if (OutIndex > 4096) return 0;
			OutStack[OutIndex++] = Suffix[OutCode];	// Add suffix to Output Stack
			OutCode = Prefix[OutCode];				// Loop with preffix
		}

		// NOW OutCode IS A RAW CODE, ADD IT TO OUTPUT STACK.
		if (OutIndex > 4096) return 0;
		OutStack[OutIndex++] = (unsigned char) OutCode;

		// ADD NEW ENTRY TO TABLE (PrevCode + OutCode)
		// (EXCEPT IF PREVIOUS CODE WAS A CLEARCODE)
		if (PrevCode!=ClearCode) {
			Prefix[NextEntry] = PrevCode;
			Suffix[NextEntry] = (unsigned char) OutCode;
			NextEntry++;

			// Prevent Translation table overflow:
			if (NextEntry>=4096) return 0;
      
			// INCREASE CodeSize IF NextEntry IS INVALID WITH CURRENT CodeSize
			if (NextEntry >= (1<<CodeSize)) {
				if (CodeSize < 12) CodeSize++;
				else {}				// Do nothing. Maybe next is Clear Code.
			}
		}

		PrevCode = Code;

		// Avoid the possibility of overflow on 'bufOut'.
		if (nPixels + OutIndex > maxPixels) OutIndex = maxPixels-nPixels;

		// OUTPUT OutStack (LAST-IN FIRST-OUT ORDER)
		for (n=OutIndex-1; n>=0; n--) {
			if (col==Width)						// Check if new row.
			{
				if (Interlace) {				// If interlaced::
					     if ((row&7)==0) {row+=8; if (row>=Height) row=4;}
					else if ((row&3)==0) {row+=8; if (row>=Height) row=2;}
					else if ((row&1)==0) {row+=4; if (row>=Height) row=1;}
					else row+=2;
				}
				else							// If not interlaced:
					row++;

				RowOffset=row*AlignedWidth;		// Set new row offset
				col=0;
			}
			bufOut[RowOffset+col]=OutStack[n];	// Write output
			col++;	nPixels++;					// Increase counters.
		}

	}	// while (main decompressor loop)

	return whichBit;
}

// Refer to WINIMAGE.TXT for copyright and patent notices on GIF and LZW.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91搞黄在线观看| 国产精品69久久久久水密桃| 欧美自拍丝袜亚洲| 亚洲色大成网站www久久九九| 97精品国产97久久久久久久久久久久 | 国产高清精品在线| 国产午夜亚洲精品不卡| 成人在线视频一区二区| 亚洲精品乱码久久久久久| 在线观看国产日韩| 免费黄网站欧美| 国产拍欧美日韩视频二区| 99久久99久久精品免费看蜜桃| 亚洲色欲色欲www在线观看| 欧美日韩一级二级三级| 韩国av一区二区三区| 中文字幕日韩一区| 538在线一区二区精品国产| 精品亚洲porn| 亚洲欧美另类综合偷拍| 777奇米四色成人影色区| 国产一区福利在线| 亚洲免费在线观看视频| 欧美一区二区三区精品| 丁香亚洲综合激情啪啪综合| 一片黄亚洲嫩模| www激情久久| 欧美系列亚洲系列| 国产一区在线视频| 亚洲国产一区二区a毛片| 337p日本欧洲亚洲大胆色噜噜| 99视频超级精品| 蜜臀va亚洲va欧美va天堂 | 一区二区三区四区高清精品免费观看 | 91丨九色丨蝌蚪富婆spa| 日日夜夜精品视频天天综合网| 久久网站热最新地址| 欧美影院午夜播放| 成人av第一页| 日韩精品一二三四| 亚洲日本在线a| 久久久亚洲精品石原莉奈| 欧美日韩免费观看一区三区| 成人综合在线视频| 久久99精品久久久久久久久久久久| 综合久久久久久| 欧美精品一区二区三区四区| 欧美日韩一级片在线观看| 成人av动漫网站| 国产一区二区三区四区五区美女 | 国产精品日日摸夜夜摸av| 91精品国产综合久久久久| 色哦色哦哦色天天综合| 国产精品一二三区在线| 久久av资源网| 免费观看成人鲁鲁鲁鲁鲁视频| 一区二区不卡在线视频 午夜欧美不卡在| 欧美精品一区二区三区蜜桃视频 | 国产在线不卡一卡二卡三卡四卡| 亚洲一区二区精品视频| 《视频一区视频二区| 国产拍揄自揄精品视频麻豆| 欧美va天堂va视频va在线| 欧美日韩黄色一区二区| 色婷婷综合中文久久一本| 99综合影院在线| 成人黄色小视频| 成人性色生活片| 国产成人亚洲综合色影视| 国产在线精品免费av| 韩国女主播一区| 精品制服美女丁香| 久久99日本精品| 国产在线精品一区二区| 国产一区美女在线| 国产一二精品视频| 国产一区二区剧情av在线| 久久99九九99精品| 国产精品一区二区果冻传媒| 国产高清精品久久久久| 国产风韵犹存在线视精品| 岛国av在线一区| 99精品国产99久久久久久白柏| thepron国产精品| 99re在线视频这里只有精品| 96av麻豆蜜桃一区二区| 91小视频在线观看| 色婷婷精品大在线视频| 欧美三级韩国三级日本三斤 | 99久久综合狠狠综合久久| 成人av动漫网站| 在线影院国内精品| 91麻豆精品国产91久久久资源速度| 日韩一区二区中文字幕| 欧美精品一区二区在线观看| 国产女人18毛片水真多成人如厕| 中文字幕一区二区三中文字幕| 亚洲精品videosex极品| 亚洲午夜视频在线观看| 日韩国产在线观看一区| 久久99国产乱子伦精品免费| 国产电影精品久久禁18| 成人黄色在线网站| 91国偷自产一区二区三区成为亚洲经典 | 中文字幕欧美日韩一区| 自拍av一区二区三区| 亚洲自拍偷拍综合| 美国av一区二区| 成人午夜激情影院| 欧美日韩精品电影| 久久久99久久| 亚洲国产欧美在线| 国产精品一区专区| 色老头久久综合| 欧美成va人片在线观看| 亚洲欧美日韩国产中文在线| 天天射综合影视| youjizz国产精品| 欧美一区二区视频在线观看2022| 国产拍揄自揄精品视频麻豆| 亚洲成人av一区二区| 国产 欧美在线| 337p亚洲精品色噜噜| 国产精品久久久久久亚洲毛片| 视频一区欧美精品| 91色九色蝌蚪| 精品国产免费视频| 亚洲国产视频直播| 成人三级在线视频| 在线观看91av| 国产精品久久久久久久第一福利| 日韩电影在线一区二区| 色综合久久天天| 国产欧美一区二区精品仙草咪| 污片在线观看一区二区 | 欧美自拍丝袜亚洲| 国产欧美中文在线| 蜜桃av一区二区在线观看| 97久久精品人人做人人爽50路| 日韩欧美不卡在线观看视频| 亚洲一区二区三区美女| 成人h动漫精品| 久久婷婷色综合| 麻豆高清免费国产一区| 欧美剧情片在线观看| 亚洲人妖av一区二区| 国产成人高清在线| 26uuu另类欧美亚洲曰本| 日韩av电影一区| 欧美日韩国产成人在线91| 亚洲欧美日韩国产一区二区三区 | 亚洲bdsm女犯bdsm网站| 94-欧美-setu| 亚洲欧洲精品一区二区三区不卡| 国产精品一品二品| 久久青草欧美一区二区三区| 六月婷婷色综合| 91精品国产综合久久久久久 | 精品影院一区二区久久久| 在线播放中文字幕一区| 夜夜夜精品看看| 在线亚洲欧美专区二区| 亚洲伦理在线精品| 色综合久久99| 一区二区成人在线| 在线精品亚洲一区二区不卡| 一区二区三区加勒比av| 在线观看一区不卡| 一区二区三区免费网站| 欧洲精品一区二区| 亚洲小少妇裸体bbw| 欧美日韩国产色站一区二区三区| 午夜国产精品影院在线观看| 欧美精三区欧美精三区| 日本中文字幕不卡| 精品国产一区二区三区久久影院| 国内精品自线一区二区三区视频| 久久婷婷久久一区二区三区| 国产91清纯白嫩初高中在线观看 | 一区二区日韩av| 欧美日韩一区小说| 蜜桃一区二区三区在线| 久久久国产精华| 成人国产电影网| 亚洲精品少妇30p| 欧美电影一区二区| 国产一区二区精品久久| 亚洲国产精品激情在线观看 | 国产99久久久精品| 国产精品免费久久| 在线亚洲免费视频| 六月丁香婷婷久久| 国产精品私人影院| 欧美色图片你懂的| 理论片日本一区| 中文字幕中文乱码欧美一区二区| 日本电影欧美片| 久久精品72免费观看| 国产精品网站在线观看| 欧美日韩国产综合视频在线观看 |