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

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

?? plugingif.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ==========================================================
// GIF Loader
//
// Design and implementation by
// - Rui Godinho Lopes <ruiglopes@yahoo.com>
// - Detlev Vendt (detlev.vendt@brillit.de)
//
// This file is part of FreeImage 3
//
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
// THIS DISCLAIMER.
//
// Use at your own risk!
// ==========================================================

#define GIF_PLUGIN_SAVE_SUPPORT	// enable write support only with UNISYS license ....

extern "C" {
#include "../LibGIF/gif_lib.h"
}
#include "FreeImage.h"
#include "Utilities.h"

// interlace pattern constants for loading/saving interlaced gif files
static const int InterlacedOffset[]= { 0, 4, 2, 1 }; // The way Interlaced image should
static const int InterlacedJumps[]= { 8, 8, 4, 2 };  // be read - offsets and jumps...

#ifdef WIN32
#pragma pack(push, 1)
#else
#pragma pack(1)
#endif

struct TGIFGraphicControlExtensionBlock
{
	BYTE nFlags;
	WORD nDelay;
	BYTE nTransparentColorIndex;
};

#ifdef WIN32
#pragma pack(pop)
#else
#pragma pack(4)
#endif

// data structure created at GifPlugin_Open and destroyed at GifPlugin_Close
struct TGifPluginData {
	FreeImageIO		*m_pIO;
	fi_handle		 m_Handle;
	GifFileType		*m_pGifFileType;
	int				 m_nTransparentColorIndex;
#ifdef GIF_PLUGIN_SAVE_SUPPORT
	BOOL			 m_bRead;
#endif
};

// adapter function for use by the gif-lib input logic
int InputFuncAdapt(GifFileType *pGifFileType, GifByteType *pBuf, int nBytesToRead) {
	return ((TGifPluginData *)pGifFileType->UserData)->m_pIO->read_proc(
		pBuf, 1, nBytesToRead, ((TGifPluginData *)pGifFileType->UserData)->m_Handle);
}

// adapter function for use by the gif-lib output logic
#ifdef GIF_PLUGIN_SAVE_SUPPORT
int OutputFuncAdapt(GifFileType *pGifFileType, const GifByteType *pBuf, int nBytesToWrite) {
	return ((TGifPluginData *)pGifFileType->UserData)->m_pIO->write_proc(
		(unsigned char *)pBuf, 1, nBytesToWrite, ((TGifPluginData *)pGifFileType->UserData)->m_Handle);
}
#endif

// ==========================================================
// Plugin Interface
// ==========================================================

static int gs_format_id;

// ==========================================================
// Plugin Implementation
// ==========================================================

static const char * DLL_CALLCONV 
GifPlugin_Format() {
	return "GIF";
}

static const char * DLL_CALLCONV 
GifPlugin_MimeType() {
	return "image/gif";
}

static const char * DLL_CALLCONV 
GifPlugin_Description() {
	return "Graphics Interchange Format";
}

static const char * DLL_CALLCONV 
GifPlugin_Extension() {
	return "gif";
}

static const char * DLL_CALLCONV 
GifPlugin_RegExpr() {
	return "^GIF";
}

static BOOL DLL_CALLCONV 
GifPlugin_SupportsExportDepth(int depth) {
#ifdef GIF_PLUGIN_SAVE_SUPPORT
	return (depth == 8);
#else
	return FALSE;
#endif
}

static BOOL DLL_CALLCONV 
GifPlugin_SupportsExportType(FREE_IMAGE_TYPE type) {
	return (type == FIT_BITMAP) ? TRUE : FALSE;
}

static BOOL DLL_CALLCONV 
GifPlugin_Validate(FreeImageIO *io, fi_handle handle) {
	char buf[GIF_STAMP_LEN];
	int  nBytesReaded = io->read_proc(buf, 1, GIF_STAMP_LEN, handle);

	//NOTE: The actual gif file version is not checked, this because
	//the GIF file structure is designed not to change significantly...	
	BOOL bResult = (nBytesReaded != GIF_STAMP_LEN ? FALSE : !strncmp(GIF_STAMP, buf, GIF_VERSION_POS));

	io->seek_proc(handle, -nBytesReaded, SEEK_CUR);

	return bResult;
}

// this plugin open function
static void *DLL_CALLCONV 
GifPlugin_Open(FreeImageIO *io, fi_handle handle, BOOL read) {

	TGifPluginData *pData= new TGifPluginData;
	if (!pData)
		return NULL;

	pData->m_Handle = handle;
	pData->m_pIO    = io;
	pData->m_nTransparentColorIndex = -1; // set to no transparent color
#ifdef GIF_PLUGIN_SAVE_SUPPORT
	pData->m_bRead  = read;
#endif

	if (read)
	{
		pData->m_pGifFileType = ::DGifOpen(pData, InputFuncAdapt);
	}
	else
	{
#ifdef GIF_PLUGIN_SAVE_SUPPORT
		pData->m_pGifFileType = ::EGifOpen(pData, OutputFuncAdapt);
#else
		pData->m_pGifFileType = NULL;
#endif
	}

	if (!pData->m_pGifFileType)
	{
		delete pData;
		return NULL;
	}

	return pData;
}


// this plugin close function
static void DLL_CALLCONV 
GifPlugin_Close(FreeImageIO *io, fi_handle handle, void *data) {

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

#ifdef GIF_PLUGIN_SAVE_SUPPORT
	if (pData->m_bRead)
		::DGifCloseFile(pData->m_pGifFileType);
	else
		::EGifCloseFile(pData->m_pGifFileType);
#else
	::DGifCloseFile(pData->m_pGifFileType);
#endif

	delete pData;
}

// this plugin load function
static FIBITMAP * DLL_CALLCONV 
GifPlugin_Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {

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

	FIBITMAP *pBitmap= NULL; // the freeimage bitmap. NOTE: This is needed here because of the exception logic (if we throw an exeception we will free the bitmap in the catch block).
	GifFileType *pGifFile = pData->m_pGifFileType;
	GifRecordType RecordType;

	try {
		do {
			if (::DGifGetRecordType(pGifFile, &RecordType) == GIF_ERROR)
				throw "io error or invalid gif format";

			switch (RecordType) {

				case IMAGE_DESC_RECORD_TYPE:
				{
					/*if (8 != pGifFile->SColorResolution)
						throw "only 8 bit color resolution gif are supported";*/

					if (::DGifGetImageDesc(pGifFile) == GIF_ERROR)
						throw "io error or invalid gif format";

					//
					// Read the image line by line
					// NOTE: The global size of the image is given by,
					// GifFile->SWidth and GifFile->SHeight
					//
					// The following sizes/positions are for the current frame only!
					//
					int nImagePosX   = pGifFile->Image.Left;
					int nImagePosY   = pGifFile->Image.Top;
					int nImageWidth  = pGifFile->Image.Width;
					int nImageHeight = pGifFile->Image.Height;

					if (nImagePosX < 0 || 
						nImagePosX > pGifFile->SWidth || 
						nImagePosX + nImageWidth > pGifFile->SWidth	|| 
						nImagePosY < 0 || 
						nImagePosY > pGifFile->SHeight || 
						nImagePosY + nImageHeight > pGifFile->SHeight)
						throw "invalid gif dimensions";


					//
					// 1. Allocate a freeimage bitmap
					//

					pBitmap = FreeImage_Allocate(pGifFile->SWidth, pGifFile->SHeight, 8);
					if (!pBitmap)
						throw "DIB allocation failed";

					// Set's the transparent color of the gif
					if (pData->m_nTransparentColorIndex >= 0)
					{
						BYTE TransparencyTable[256];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品久久久久影院一蜜桃| 成人sese在线| 国产成人欧美日韩在线电影| av亚洲产国偷v产偷v自拍| 色欧美日韩亚洲| 日韩视频一区在线观看| 国产精品久久久久久亚洲毛片 | www.欧美色图| 欧美亚洲国产一区在线观看网站| 99免费精品视频| 在线综合视频播放| 日本一区二区三区免费乱视频| 一区二区三区在线播放| 美日韩一区二区| 91在线无精精品入口| 欧美精品视频www在线观看| 国产精品美女久久久久久久久| 亚洲国产精品久久人人爱| 国产乱码精品一区二区三区av| 91国在线观看| 欧美激情一区二区三区全黄| 日韩av成人高清| 在线观看一区二区视频| 国产精品久久久久影视| 免费看欧美美女黄的网站| 色综合天天综合狠狠| 久久精品日产第一区二区三区高清版| 一区二区三区欧美视频| 国产91在线|亚洲| 欧美大片在线观看| 午夜久久电影网| 欧美午夜在线一二页| 亚洲特级片在线| 成人在线视频首页| 国产日韩欧美不卡| 韩国av一区二区三区四区| 91丨九色丨黑人外教| 精品国产乱码久久久久久免费| 99视频国产精品| 久久精品视频在线免费观看| 国产乱人伦偷精品视频不卡| 国产欧美一区二区三区网站| a级精品国产片在线观看| 一区二区中文字幕在线| 成人免费高清视频在线观看| 日本一区二区三区四区| 成人激情黄色小说| 国产精品久久三| 99国产精品久久久久久久久久久| 国产人成一区二区三区影院| 国产精品自拍网站| 精品国产a毛片| 国产精品资源在线| 国产精品美女久久福利网站| 成人av在线观| 亚洲精品国产精华液| 欧美日韩视频不卡| 午夜电影久久久| 欧美精品v日韩精品v韩国精品v| 午夜成人在线视频| 欧美一级久久久| 国产麻豆91精品| 中文字幕不卡的av| 色综合久久综合| 三级在线观看一区二区| 日韩一区二区在线看片| 国产伦精品一区二区三区在线观看| 精品国精品国产| 成人免费va视频| 亚洲国产人成综合网站| 日韩欧美精品在线| 成人福利视频网站| 亚洲精品中文在线| 欧美日韩成人综合在线一区二区| 日韩精品乱码免费| 久久久亚洲国产美女国产盗摄| 国产东北露脸精品视频| 1024精品合集| 欧美精品国产精品| 国产福利91精品| 性久久久久久久久久久久| 久久一留热品黄| 欧美又粗又大又爽| 国模套图日韩精品一区二区| 国产精品美女久久久久aⅴ| 欧美少妇bbb| 国产高清久久久久| 亚洲一区二区视频在线观看| 精品欧美久久久| 99久久久久免费精品国产| 日韩成人精品在线观看| 亚洲视频每日更新| 91 com成人网| 99精品国产视频| 麻豆精品精品国产自在97香蕉 | 老司机免费视频一区二区| 亚洲国产精品传媒在线观看| 欧美日韩亚洲另类| 毛片基地黄久久久久久天堂| 亚洲丝袜美腿综合| 久久综合色天天久久综合图片| 欧美色涩在线第一页| 国产成人av电影在线观看| 免费成人你懂的| 亚洲精品视频免费看| 日韩欧美国产电影| 91福利在线观看| 99久久伊人久久99| 久久www免费人成看片高清| 亚洲三级免费电影| www欧美成人18+| 欧美日韩精品欧美日韩精品一综合| 国产一区二区主播在线| 日韩主播视频在线| 一区二区三区在线视频免费| 国产女同互慰高潮91漫画| 欧美一区二区久久| 欧洲一区二区av| 91同城在线观看| 不卡的电视剧免费网站有什么| 久久成人麻豆午夜电影| 人人超碰91尤物精品国产| 亚洲成人动漫在线观看| 国产精品成人在线观看| 国产农村妇女毛片精品久久麻豆| 日韩精品一区国产麻豆| 555夜色666亚洲国产免| 欧美日韩一区在线| 色婷婷久久一区二区三区麻豆| eeuss鲁片一区二区三区在线看| 国内精品国产三级国产a久久| 九色综合国产一区二区三区| 日本在线不卡一区| 国产在线观看一区二区| 成人免费视频国产在线观看| 色激情天天射综合网| 日韩一卡二卡三卡四卡| 国产亚洲美州欧州综合国| 自拍偷拍亚洲激情| 欧美aⅴ一区二区三区视频| 韩国午夜理伦三级不卡影院| 懂色av一区二区三区免费观看| 97久久超碰精品国产| 欧美日韩国产高清一区二区| 欧美r级在线观看| 中文字幕亚洲一区二区va在线| 午夜精品久久久| 成人综合激情网| 在线播放国产精品二区一二区四区| 欧美精品一区二区在线观看| 国产精品久久久久久一区二区三区 | 国产精品传媒在线| 亚洲成人精品影院| 国产九九视频一区二区三区| 欧美视频中文一区二区三区在线观看| 欧美成人精品福利| 亚洲另类一区二区| 国产精品99久久久久久久vr| 欧洲一区二区av| 中文字幕不卡一区| 伦理电影国产精品| 在线精品视频免费观看| 中文字幕国产一区| 久久激五月天综合精品| 欧美性视频一区二区三区| 国产亚洲美州欧州综合国| 日本亚洲欧美天堂免费| av午夜精品一区二区三区| 337p日本欧洲亚洲大胆精品| 亚洲影视在线观看| 99精品热视频| 国产三级一区二区三区| 免费在线视频一区| 色婷婷av一区二区| 亚洲欧美综合网| 国产成人精品亚洲777人妖| 3d成人h动漫网站入口| 亚洲国产视频直播| 97精品久久久午夜一区二区三区| 久久先锋影音av| 久久精品免费观看| 欧美丰满高潮xxxx喷水动漫| 亚洲裸体xxx| 91在线免费播放| 国产精品沙发午睡系列990531| 久久99精品久久久久久国产越南| 56国语精品自产拍在线观看| 亚洲国产欧美一区二区三区丁香婷| 91无套直看片红桃| 国产精品福利一区二区| 成人福利视频在线看| 中文字幕不卡在线| 成人国产视频在线观看| 国产精品久久久久久一区二区三区| 风流少妇一区二区| 国产精品每日更新| 色综合天天综合在线视频| 亚洲综合免费观看高清完整版在线| 99久久777色| 亚洲最大色网站|