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

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

?? plugingif.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
						memset(TransparencyTable, 0xff, pData->m_nTransparentColorIndex);
						TransparencyTable[pData->m_nTransparentColorIndex] = 0;

						FreeImage_SetTransparencyTable(pBitmap, 
							TransparencyTable, pData->m_nTransparentColorIndex+1);
					}

					// clear dib with GIF background color
					{
						//TODO: memset the all the bib at once and not line by line.
						for (int n = 0; n < pGifFile->SHeight; ++n)
						{
							BYTE *pScanLine = FreeImage_GetScanLine(pBitmap, n);
							memset(pScanLine, pGifFile->SBackGroundColor, pGifFile->SWidth);
						}
					}


					//
					// 2. copy the palette from gif to freeimage palette
					//

					// get the current image color map (the image map can be local to a frame or global to all the file)
					ColorMapObject *pImageColorMap = 
						pGifFile->Image.ColorMap? pGifFile->Image.ColorMap : pGifFile->SColorMap;

					if (pImageColorMap->ColorCount > 256)
						throw "invalid gif color count";

					GifColorType *pGifPalette = pImageColorMap->Colors;
					RGBQUAD *pPalette = FreeImage_GetPalette(pBitmap);

					for (int nColorIndex = 0; nColorIndex < pImageColorMap->ColorCount; ++nColorIndex)
					{
						pPalette->rgbRed   = pGifPalette->Red;
						pPalette->rgbGreen = pGifPalette->Green;
						pPalette->rgbBlue  = pGifPalette->Blue;

						++pGifPalette;
						++pPalette;
					}

					//
					// 3. copy gif scanlines to freeimage bitmap
					//

					if (pGifFile->Image.Interlace)
					{
						// Need to perform 4 passes on the image
						for (int nPass= 0; nPass < 4; ++nPass)
							for (int n = InterlacedOffset[nPass]; n < nImageHeight; n += InterlacedJumps[nPass])
							{
								//NOTE: The gif is an top-down image BUT freeimage dib are bottom-up
								BYTE *pScanLine = FreeImage_GetScanLine(pBitmap, nImageHeight-n-1+nImagePosY);

								if (::DGifGetLine(pGifFile, pScanLine, nImageWidth) == GIF_ERROR)
									throw "io error or invalid gif format";
							}
					}
					else
						for (int n = nImageHeight; n--; )
						{
							//NOTE: The gif is an top-down image BUT freeimage dib are bottom-up
							BYTE *pScanLine = FreeImage_GetScanLine(pBitmap, n+nImagePosY);

							if (::DGifGetLine(pGifFile, pScanLine+nImagePosX, nImageWidth) == GIF_ERROR)
								throw "io error or invalid gif format";
						}


					// free this image since we don't need it in the gif structure...
					// NOTE: If we don't free it and the gif as more than one image
					// that images all get appended to the SavedImages array.
					::FreeSavedImages(pGifFile);
					pGifFile->SavedImages = NULL;
					pGifFile->ImageCount  = 0;

					return pBitmap;
				}
				break;

				case EXTENSION_RECORD_TYPE:
				{
					int ExtCode;
					GifByteType *Extension;

					//
					// Skip any extension blocks in file
					//
					if (::DGifGetExtension(pGifFile, &ExtCode, &Extension) == GIF_ERROR)
						throw "io error or invalid gif format";

					if (ExtCode == GRAPHICS_EXT_FUNC_CODE	// is this a Graphic Control Extension block?
						&& Extension[0] >= 4)				// this block must have at least 4 bytes!
					{
						TGIFGraphicControlExtensionBlock *pExt = 
							(TGIFGraphicControlExtensionBlock *)&Extension[1];

						if (pExt->nFlags&0x01)  // this image has an transparent color?
							pData->m_nTransparentColorIndex = pExt->nTransparentColorIndex;

						//in pExt->nDelay is the delay time in 1/100 of a second that the next frame is expected to wait
						//unsigned nDelay= (Extension[2] | (Extension[3]<<8)) * 10; // nDelay converted to ms
					}

					while (Extension)
					{
						if (::DGifGetExtensionNext(pGifFile, &Extension) == GIF_ERROR)
							throw "io error or invalid gif format";
					}
				}
				break;
			} // switch

		} while (RecordType != TERMINATE_RECORD_TYPE);

	} catch (const char *pErrorMsg)	{
		FreeImage_OutputMessageProc(gs_format_id, pErrorMsg);
	}
	FreeImage_Unload(pBitmap);
	return NULL;
}

// this plugin save function
#ifdef GIF_PLUGIN_SAVE_SUPPORT
static BOOL DLL_CALLCONV 
GifPlugin_Save(FreeImageIO *io, FIBITMAP *pDib, fi_handle handle, int page, int flags, void *data) {

	TGifPluginData *pData = (TGifPluginData *)data;
	if (!pData)
		return FALSE;

	GifFileType *pGifFile = pData->m_pGifFileType;
	ColorMapObject *pGifColorMap = NULL;

	try {
		if (FreeImage_GetBPP(pDib) != 8)
			throw "Only 8 bit images are supported";

		//
		// if we have an transparency table make sure that the transparent
		// color is with 0 (full transparent alpha) value.
		// NOTE: This plugin sets the gif transparent color index to the
		// last transparency index of the freeimage dib.
		//
		int nTransparentColorIndex = FreeImage_GetTransparencyCount(pDib)-1;
		if (nTransparentColorIndex >= 0 && FreeImage_GetTransparencyTable(pDib)[nTransparentColorIndex])
			throw "invalid transparent color in dib";

		//
		// copy color table from dib into gif color map
		//
		if (!(pGifColorMap = ::MakeMapObject(256, NULL)))
			throw "No memory";

		RGBQUAD *pPalette = FreeImage_GetPalette(pDib);
		GifColorType *pGifPalette = pGifColorMap->Colors;

		for (int nColorIndex = 0; nColorIndex < 256; ++nColorIndex)
		{
			pGifPalette->Red   = pPalette->rgbRed;
			pGifPalette->Green = pPalette->rgbGreen;
			pGifPalette->Blue  = pPalette->rgbBlue;

			++pGifPalette;
			++pPalette;
		}

		//
		// write gif screen description
		//
		if (::EGifPutScreenDesc(pGifFile, 
				FreeImage_GetWidth(pDib), FreeImage_GetHeight(pDib), 8, 0, NULL) == GIF_ERROR)
			throw "io error";

		//
		// write transparent color information if the dib has one
		//
		if (nTransparentColorIndex >= 0)
		{
			TGIFGraphicControlExtensionBlock Extension = { 0x01, 0, nTransparentColorIndex };
			if (::EGifPutExtension(pGifFile, GRAPHICS_EXT_FUNC_CODE, 4, &Extension) == GIF_ERROR)
				throw "io error";
		}

		//
		// write image data
		//
		int nImageWidth  = pGifFile->SWidth;
		int nImageHeight = pGifFile->SHeight;

		//TODO: retreive the interlace option value from flags argument
		if (::EGifPutImageDesc(pGifFile, 0, 0, 
				nImageWidth, nImageHeight, FALSE, pGifColorMap) == GIF_ERROR)
			throw "io error";

		::FreeMapObject(pGifColorMap);
		pGifColorMap = NULL; //NOTE: need to place NULL here because the exception handling code frees it!

		for (int n= nImageHeight; n--; )
		{
			//NOTE: The gif is an top-down image BUT freeimage dib are bottom-up
			BYTE *pScanLine = FreeImage_GetScanLine(pDib, n);

			if (::EGifPutLine(pGifFile, pScanLine, nImageWidth) == GIF_ERROR)
				throw "io error";
		}
		return TRUE;

	} catch (const char *pErrorMsg)	{
		FreeImage_OutputMessageProc(gs_format_id, pErrorMsg);
	}

	if (pGifColorMap)
		::FreeMapObject(pGifColorMap);

	return FALSE;
}
#endif //#ifdef GIF_PLUGIN_SAVE_SUPPORT

// ==========================================================
//   Init
// ==========================================================

void DLL_CALLCONV 
InitGIF(Plugin *plugin, int format_id) {
	gs_format_id = format_id;

	plugin->format_proc = GifPlugin_Format;
	plugin->description_proc = GifPlugin_Description;
	plugin->extension_proc = GifPlugin_Extension;
	plugin->regexpr_proc = GifPlugin_RegExpr;
	plugin->open_proc = GifPlugin_Open;
	plugin->load_proc = GifPlugin_Load;

#ifdef GIF_PLUGIN_SAVE_SUPPORT
	plugin->save_proc = GifPlugin_Save;
#else
	plugin->save_proc = NULL;
#endif // #ifdef GIF_PLUGIN_SAVE_SUPPORT

	plugin->close_proc = GifPlugin_Close;
	plugin->validate_proc = GifPlugin_Validate;

	plugin->pagecount_proc = NULL;
	plugin->pagecapability_proc = NULL;
	plugin->mime_proc = GifPlugin_MimeType;
	plugin->supports_export_bpp_proc = GifPlugin_SupportsExportDepth;
	plugin->supports_export_type_proc = GifPlugin_SupportsExportType;
	plugin->supports_icc_profiles_proc = NULL;

#ifdef GIF_PLUGIN_SAVE_SUPPORT
	//NOTE: Since this plugin can make transparent gif
	//we will produce gif89a version gif's
	::EGifSetGifVersion("89a");
#endif // #ifdef GIF_PLUGIN_SAVE_SUPPORT

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级欧美韩日大片在线看| 国产麻豆成人传媒免费观看| 欧美国产丝袜视频| 久久久久久久精| 精品av久久707| 久久久久久一二三区| 久久网站热最新地址| 久久久久久久久99精品| 久久久99久久| 中文一区二区在线观看| 国产精品嫩草影院com| 亚洲国产成人午夜在线一区| 国产精品久久久久一区| 亚洲欧美日韩系列| 亚洲午夜免费福利视频| 亚洲国产成人高清精品| 日韩精品91亚洲二区在线观看| 日韩国产精品久久| 久久狠狠亚洲综合| 国产精品1区2区3区在线观看| 国产成人免费视频| 9i在线看片成人免费| 在线精品国精品国产尤物884a| 欧美日韩一卡二卡| 欧美刺激脚交jootjob| 久久久精品日韩欧美| 中文字幕一区二区在线观看 | 亚洲欧美在线视频观看| 亚洲视频一二三区| 亚洲国产精品自拍| 久久99精品久久久久久| 波多野洁衣一区| 欧美三级电影网| 精品国产髙清在线看国产毛片| 日本一区二区三区dvd视频在线| 亚洲欧美一区二区三区久本道91| 亚洲成av人片在www色猫咪| 九九国产精品视频| 99精品视频一区二区| 精品视频在线免费看| 精品精品欲导航| 日本一区二区成人在线| 亚洲一区二区三区影院| 精品一二三四在线| 91麻豆国产在线观看| 精品伦理精品一区| 亚洲色图视频网站| 蜜臀久久99精品久久久画质超高清| 国产精品一级黄| 欧美特级限制片免费在线观看| 精品剧情v国产在线观看在线| 中文字幕制服丝袜成人av | 韩国中文字幕2020精品| 一本大道av伊人久久综合| 7777精品伊人久久久大香线蕉超级流畅 | 一区2区3区在线看| 久88久久88久久久| 色噜噜狠狠色综合欧洲selulu| 精品美女一区二区| 一区av在线播放| 国产.欧美.日韩| 欧美老年两性高潮| 自拍av一区二区三区| 国产精品综合久久| 在线观看一区二区精品视频| 国产日韩欧美一区二区三区综合 | 在线免费观看一区| 久久久欧美精品sm网站| 亚洲风情在线资源站| 成人av免费在线| 久久综合九色综合欧美亚洲| 午夜亚洲福利老司机| 成人理论电影网| 久久蜜臀中文字幕| 青青草一区二区三区| 在线观看亚洲精品| 一区在线观看视频| 国产激情偷乱视频一区二区三区| 日韩亚洲欧美成人一区| 亚洲自拍欧美精品| 一本大道综合伊人精品热热| 欧美激情在线看| 国产乱人伦精品一区二区在线观看| 欧美精三区欧美精三区| 亚洲午夜精品在线| 色哟哟一区二区| 国产精品不卡视频| 成人深夜福利app| 国产午夜精品在线观看| 久久99精品久久只有精品| 7777精品伊人久久久大香线蕉超级流畅| 亚洲男人电影天堂| 99久久精品免费| 国产精品美女视频| 成人av网站在线观看免费| 国产日韩欧美a| 高清在线成人网| 国产日韩v精品一区二区| 国产美女娇喘av呻吟久久| 精品国产乱子伦一区| 日韩av午夜在线观看| 欧美一区午夜视频在线观看| 日日欢夜夜爽一区| 欧美精品第一页| 日韩高清电影一区| 91精品国产综合久久久久久| 日本不卡一区二区三区高清视频| 欧美精品久久久久久久多人混战 | 91精品国产一区二区三区香蕉| 亚洲一区av在线| 欧美日韩亚洲综合一区| 手机精品视频在线观看| 日韩一区和二区| 经典一区二区三区| 国产网红主播福利一区二区| 国产成人综合在线播放| 欧美国产日本韩| 91美女片黄在线| 亚洲观看高清完整版在线观看 | 一区二区免费在线| 欧美日韩一区国产| 另类小说一区二区三区| 国产亚洲欧美在线| 91首页免费视频| 午夜影视日本亚洲欧洲精品| 日韩一区二区三区在线观看| 久久国产精品第一页| 国产欧美日韩精品在线| 91老师片黄在线观看| 亚洲国产视频一区二区| 日韩女优视频免费观看| 精品一区二区免费在线观看| 久久久久久久久伊人| 成人午夜私人影院| 亚洲午夜日本在线观看| 欧美videossexotv100| 国产中文一区二区三区| 一区二区中文字幕在线| 色综合中文字幕| 免费黄网站欧美| 91麻豆精品国产自产在线 | 亚洲一区欧美一区| 日韩精品在线网站| 亚洲一区在线观看免费观看电影高清| 欧美日韩极品在线观看一区| 国产一区二区三区在线看麻豆| 国产欧美精品一区| 欧美日韩免费电影| 久久精品国产第一区二区三区| 国产精品久久福利| 91精品国产色综合久久| 国产精品系列在线播放| 亚洲一区二区美女| 日韩欧美在线123| 91在线无精精品入口| 亚洲1区2区3区视频| 欧美激情综合五月色丁香| 成人黄色av电影| 图片区小说区区亚洲影院| 国产精品免费观看视频| 欧美欧美午夜aⅴ在线观看| 国产精品18久久久久久久久久久久| 中文字幕av在线一区二区三区| 4438x亚洲最大成人网| 狠狠色综合日日| 亚洲mv在线观看| 日韩一区在线播放| 日韩欧美国产小视频| 在线一区二区视频| 久久99久久久久久久久久久| 亚洲国产综合色| 国产精品久久久久一区二区三区共| 欧美精品日韩一区| 在线亚洲免费视频| 国产成人在线看| 精品一区二区三区日韩| 性做久久久久久久免费看| 中文av一区二区| 精品福利在线导航| 欧美日韩一区视频| 日本久久一区二区| 丁香网亚洲国际| 美国av一区二区| 亚洲国产精品视频| 久久夜色精品国产噜噜av | 欧美日韩亚洲综合| 成人动漫中文字幕| 国产成人精品亚洲日本在线桃色| 亚洲va国产va欧美va观看| 一区二区三区欧美日| 中文字幕在线一区免费| 日韩精品影音先锋| 日韩一二三四区| 欧美日韩一区三区四区| 在线视频国内一区二区| 91天堂素人约啪| 成人99免费视频| 成人av免费观看| 国产精品亚洲第一| 国产大片一区二区|