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

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

?? plugin.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// =====================================================================
// FreeImage Plugin Interface
//
// Design and implementation by
// - Floris van den Berg (flvdberg@wxs.nl)
// - Rui Lopes (ruiglopes@yahoo.com)
// - Detlev Vendt (detlev.vendt@brillit.de)
// - Petr Pytelka (pyta@lightcomp.com)
//
// 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!
// =====================================================================

#ifdef WIN32
#pragma warning (disable : 4786) // identifier was truncated to 'number' characters
#include <windows.h>
#include <io.h>
#else
#include <ctype.h>
#endif // WIN32

#include "FreeImage.h"
#include "Utilities.h"
#include "FreeImageIO.h"
#include "Plugin.h"

// =====================================================================

using namespace std;

// =====================================================================
// Plugin search list
// =====================================================================

const char *
s_search_list[] = {
	"",
	"plugins\\",
};

static int s_search_list_size = sizeof(s_search_list) / sizeof(char *);
static PluginList *s_plugins = NULL;
static int s_plugin_reference_count = 0;


// =====================================================================
// Reimplementation of stricmp (it is not supported on some systems)
// =====================================================================

int
FreeImage_stricmp(const char *s1, const char *s2) {
	int c1, c2;

	do {
		c1 = tolower(*s1++);
		c2 = tolower(*s2++);
	} while (c1 && c1 == c2);

	return c1 - c2;
}

// =====================================================================
//  Implementation of PluginList
// =====================================================================

PluginList::PluginList() :
m_plugin_map(),
m_node_count(0) {
}

FREE_IMAGE_FORMAT
PluginList::AddNode(FI_InitProc init_proc, void *instance, const char *format, const char *description, const char *extension, const char *regexpr) {
	if (init_proc != NULL) {
		PluginNode *node = new PluginNode;
		Plugin *plugin = new Plugin;

		memset(plugin, 0, sizeof(Plugin));

		// fill-in the plugin structure

		init_proc(plugin, m_plugin_map.size());

		// get the format string (two possible ways)

		const char *the_format = NULL;

		if (format != NULL) 
			the_format = format;
		else if (plugin->format_proc != NULL)
			the_format = plugin->format_proc();

		// add the node if it wasn't there already

		if (the_format != NULL) {
			if (FindNodeFromFormat(the_format) == NULL) {
				node->m_id = m_plugin_map.size();
				node->m_instance = instance;
				node->m_plugin = plugin;
				node->m_format = format;
				node->m_description = description;
				node->m_extension = extension;
				node->m_regexpr = regexpr;
				node->m_next = NULL;
				node->m_enabled = TRUE;

				m_plugin_map[m_plugin_map.size()] = node;

				return (FREE_IMAGE_FORMAT)node->m_id;
			}
		}

		// something went wrong while allocating the plugin... cleanup

		delete plugin;
		delete node;
	}

	return FIF_UNKNOWN;
}

PluginNode *
PluginList::FindNodeFromFormat(const char *format) {
	int count = 0;

	for (map<int, PluginNode *>::iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) {
		const char *the_format = ((*i).second->m_format != NULL) ? (*i).second->m_format : (*i).second->m_plugin->format_proc();

		if (FreeImage_stricmp(the_format, format) == 0)
			return (*i).second;		

		count++;
	}

	return NULL;
}

PluginNode *
PluginList::FindNodeFromMime(const char *mime) {
	int count = 0;

	for (map<int, PluginNode *>::iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) {
		const char *the_mime = ((*i).second->m_plugin->mime_proc != NULL) ? (*i).second->m_plugin->mime_proc() : "";

		if ((the_mime != NULL) && (strcmp(the_mime, mime) == 0))
			return (*i).second;		

		count++;
	}

	return NULL;
}

PluginNode *
PluginList::FindNodeFromFIF(int node_id) {
	map<int, PluginNode *>::iterator i = m_plugin_map.find(node_id);

	if (i != m_plugin_map.end())
		return (*i).second;

	return NULL;
}

int
PluginList::Size() const {
	return m_plugin_map.size();
}

BOOL
PluginList::IsEmpty() const {
	return m_plugin_map.empty();
}

PluginList::~PluginList() {
	for (map<int, PluginNode *>::iterator i = m_plugin_map.begin(); i != m_plugin_map.end(); ++i) {
#ifdef WIN32
		if ((*i).second->m_instance != NULL)
			FreeLibrary((HINSTANCE)(*i).second->m_instance);
#endif
		delete (*i).second->m_plugin;
		delete ((*i).second);
	}
}

// =====================================================================
// Retrieve a pointer to the plugin list container
// =====================================================================

PluginList * DLL_CALLCONV
FreeImage_GetPluginList() {
	return s_plugins;
}

// =====================================================================
// Plugin System Initialization
// =====================================================================

void DLL_CALLCONV
FreeImage_Initialise(BOOL load_local_plugins_only) {
	if (s_plugin_reference_count++ == 0) {

		// internal plugin initialization

		s_plugins = new PluginList;

		if (s_plugins) {
			s_plugins->AddNode(InitBMP);
			s_plugins->AddNode(InitICO);
			s_plugins->AddNode(InitJPEG);
			s_plugins->AddNode(InitMNG, NULL, "JNG", "JPEG Network Graphics", "jng", "");
			s_plugins->AddNode(InitKOALA);
			s_plugins->AddNode(InitIFF);
			s_plugins->AddNode(InitMNG);
			s_plugins->AddNode(InitPNM, NULL, "PBM", "Portable Bitmap (ASCII)", "pbm", "^P1");
			s_plugins->AddNode(InitPNM, NULL, "PBMRAW", "Portable Bitmap (RAW)", "pbm", "^P4");
			s_plugins->AddNode(InitPCD);
			s_plugins->AddNode(InitPCX);
			s_plugins->AddNode(InitPNM, NULL, "PGM", "Portable Greymap (ASCII)", "pgm", "^P2");
			s_plugins->AddNode(InitPNM, NULL, "PGMRAW", "Portable Greymap (RAW)", "pgm", "^P5");
			s_plugins->AddNode(InitPNG);
			s_plugins->AddNode(InitPNM, NULL, "PPM", "Portable Pixelmap (ASCII)", "ppm", "^P3");
			s_plugins->AddNode(InitPNM, NULL, "PPMRAW", "Portable Pixelmap (RAW)", "ppm", "^P6");
			s_plugins->AddNode(InitRAS);
			s_plugins->AddNode(InitTARGA);
			s_plugins->AddNode(InitTIFF);
			s_plugins->AddNode(InitWBMP);
			s_plugins->AddNode(InitPSD);
			s_plugins->AddNode(InitCUT);
			s_plugins->AddNode(InitXBM);
			s_plugins->AddNode(InitXPM);
			s_plugins->AddNode(InitDDS);
	        s_plugins->AddNode(InitGIF);
			
			// external plugin initialization

#ifdef WIN32
			if (!load_local_plugins_only) {
				int count = 0;
				char buffer[MAX_PATH + 200];
				char current_dir[2 * _MAX_PATH], module[2 * _MAX_PATH];
				BOOL bOk = FALSE;

				// store the current directory. then set the directory to the application location

				if (GetCurrentDirectoryA(2 * _MAX_PATH, current_dir) != 0) {
					if (GetModuleFileNameA(NULL, module, 2 * _MAX_PATH) != 0) {
						char *last_point = strrchr(module, '\\');

						if (last_point) {
							*last_point = '\0';

							bOk = SetCurrentDirectoryA(module);
						}
					}
				}

				// search for plugins

				while (count < s_search_list_size) {
					_finddata_t find_data;
					long find_handle;

					strcpy(buffer, s_search_list[count]);
					strcat(buffer, "*.fip");

					if ((find_handle= _findfirst(buffer, &find_data)) != -1L) {
						do {
							strcpy(buffer, s_search_list[count]);
							strncat(buffer, find_data.name, MAX_PATH + 200);

							HINSTANCE instance = LoadLibraryA(buffer);

							if (instance != NULL) {
								FARPROC proc_address = GetProcAddress(instance, "_Init@8");

								if (proc_address != NULL)
									s_plugins->AddNode((FI_InitProc)proc_address, (void *)instance);
								else
									FreeLibrary(instance);
							}
						} while (_findnext(find_handle, &find_data) != -1L);

						_findclose(find_handle);
					}

					count++;
				}

				// restore the current directory

				if (bOk)
					SetCurrentDirectoryA(current_dir);
			}
#endif // WIN32
		}
	}
}

void DLL_CALLCONV
FreeImage_DeInitialise() {
	--s_plugin_reference_count;

	if (s_plugin_reference_count == 0) {
		delete s_plugins;
	}
}

// =====================================================================
// Open and close a bitmap
// =====================================================================

void * DLL_CALLCONV
FreeImage_Open(PluginNode *node, FreeImageIO *io, fi_handle handle, BOOL open_for_reading) {
	if (node->m_plugin->open_proc != NULL)
       return node->m_plugin->open_proc(io, handle, open_for_reading);

	return NULL;
};

void DLL_CALLCONV
FreeImage_Close(PluginNode *node, FreeImageIO *io, fi_handle handle, void *data) {
	if (node->m_plugin->close_proc != NULL)
		node->m_plugin->close_proc(io, handle, data);
};

// =====================================================================
// Plugin System Load/Save Functions
// =====================================================================

FIBITMAP * DLL_CALLCONV
FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags) {
	if ((fif >= 0) && (fif < FreeImage_GetFIFCount())) {
		PluginNode *node = s_plugins->FindNodeFromFIF(fif);

		if (node != NULL) {
			if (node->m_enabled) {
				if(node->m_plugin->load_proc != NULL) {
				FIBITMAP *bitmap = NULL;

				void *data = FreeImage_Open(node, io, handle, TRUE);

				bitmap = node->m_plugin->load_proc(io, handle, -1, flags, data);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看在线视频| 日韩午夜在线播放| 亚洲精选视频在线| 91免费在线播放| 亚洲成人免费av| 欧美日韩国产精选| 麻豆国产一区二区| 久久综合给合久久狠狠狠97色69| 国产一区久久久| 日本一区二区电影| 在线免费观看日本欧美| 日韩成人午夜精品| 亚洲精品一区二区三区香蕉| 国产精品资源网| 亚洲日本在线a| 91精品视频网| 风间由美一区二区三区在线观看| 亚洲欧洲一区二区三区| 精品视频一区 二区 三区| 日韩av一区二区三区四区| 久久免费午夜影院| 色婷婷久久久综合中文字幕| 日韩高清不卡在线| 中文字幕不卡的av| 欧美男男青年gay1069videost| 国模一区二区三区白浆| 亚洲精品少妇30p| 欧美刺激午夜性久久久久久久| 国产一区二区三区免费播放| 亚洲精品中文在线| 欧美一区二区三区精品| 成人激情综合网站| 亚洲精品国久久99热| 日韩欧美在线1卡| 9久草视频在线视频精品| 天天色图综合网| 国产精品毛片高清在线完整版| 欧美日韩一级片网站| 成人小视频在线| 日本少妇一区二区| 亚洲欧美日韩中文播放| 精品99999| 欧美日韩午夜精品| 成人h精品动漫一区二区三区| 日韩**一区毛片| 亚洲精品国产无套在线观| 久久先锋影音av鲁色资源网| 在线免费观看日本一区| 成人精品一区二区三区中文字幕 | 精品国产乱码久久久久久免费| 色诱视频网站一区| 国产91综合一区在线观看| 婷婷一区二区三区| 中文字幕字幕中文在线中不卡视频| 日韩欧美成人午夜| 在线成人免费视频| 欧美中文字幕一区| 91香蕉视频污| 成人午夜免费电影| 国产成人在线视频播放| 蜜臀久久99精品久久久久宅男 | 欧美午夜精品久久久| 成人自拍视频在线| 国产精品一二三| 精品一区二区在线播放| 免费看日韩精品| 日韩1区2区3区| 亚洲va欧美va人人爽| 亚洲一区二区三区爽爽爽爽爽| 国产精品视频一二三| 久久亚区不卡日本| 久久综合九色综合97婷婷女人| 欧美xxxxxxxxx| 欧美一区二区三区在线看| 91精品国产综合久久精品app| 色菇凉天天综合网| 在线观看视频91| 色八戒一区二区三区| 91国偷自产一区二区三区成为亚洲经典 | 色一情一乱一乱一91av| 国产69精品久久99不卡| 欧美亚洲国产一区二区三区| av日韩在线网站| 一本到高清视频免费精品| 91亚洲精品久久久蜜桃| 成人久久视频在线观看| av亚洲精华国产精华精| 99国产精品视频免费观看| 91免费版在线看| 91久久精品网| 欧美久久婷婷综合色| 91精品福利在线一区二区三区| 91精品在线一区二区| 91精品国产乱| 久久精品夜夜夜夜久久| 国产日本欧美一区二区| 国产精品美女视频| 亚洲最新视频在线观看| 亚洲国产一区二区a毛片| 日本美女一区二区三区视频| 蜜桃视频一区二区三区在线观看| 九九在线精品视频| 国产成人精品免费网站| 99精品一区二区| 欧美性淫爽ww久久久久无| 69堂国产成人免费视频| 久久毛片高清国产| 亚洲色图色小说| 日韩在线一区二区| 国产原创一区二区三区| 成人av电影在线播放| 欧美色网一区二区| 日韩精品最新网址| 国产精品久久99| 亚洲成人午夜影院| 国产精一品亚洲二区在线视频| 91在线视频观看| 56国语精品自产拍在线观看| 国产喷白浆一区二区三区| 夜夜亚洲天天久久| 国产一区激情在线| 欧美性猛交xxxx乱大交退制版| 欧美不卡123| 亚洲一二三专区| 国产精品一二三| 91精品国产欧美一区二区成人| 国产视频一区不卡| 亚洲福利一二三区| 成人黄色电影在线| 欧美一区二区在线免费播放| 1000部国产精品成人观看| 日韩制服丝袜av| 色系网站成人免费| 日韩精品一区二区三区视频在线观看 | 91在线看国产| 日本在线不卡一区| 日韩黄色免费网站| 亚洲日本青草视频在线怡红院| 一本色道a无线码一区v| 亚洲国产综合91精品麻豆| 色综合久久六月婷婷中文字幕| 91麻豆精品国产自产在线| caoporn国产一区二区| 舔着乳尖日韩一区| 亚洲精品一线二线三线| 国产成人综合视频| 成人免费视频在线观看| 欧美日韩一区小说| 国产日韩高清在线| 国内精品写真在线观看| 日韩欧美黄色影院| 亚洲国产日日夜夜| 91亚洲国产成人精品一区二三| 精品免费99久久| 91尤物视频在线观看| 国产欧美综合色| 成人免费视频国产在线观看| 26uuu久久天堂性欧美| 久久疯狂做爰流白浆xx| 2020日本不卡一区二区视频| 国产成人自拍网| 欧美色涩在线第一页| 国产精品久久久久一区二区三区共| 免费在线观看成人| 日韩一区二区三区免费看| 亚洲精品一区二区三区福利| 亚洲一区二区三区四区五区中文| 欧美日韩中文一区| 色久综合一二码| 欧美区一区二区三区| 精品成人佐山爱一区二区| 国产欧美日韩在线| 一区二区三区国产豹纹内裤在线| 亚洲宅男天堂在线观看无病毒| 日韩二区在线观看| 国产在线不卡一区| 在线精品观看国产| 欧美体内she精视频| 成人福利视频网站| 欧美理论电影在线| 国产精品你懂的在线欣赏| 亚洲一区二区视频| 成人永久看片免费视频天堂| 欧美日韩电影在线| 国产精品久久网站| 国产一区二区三区四区五区入口 | 欧美自拍偷拍午夜视频| 波多野结衣中文字幕一区 | www国产亚洲精品久久麻豆| 欧美精品第1页| 在线视频亚洲一区| 91在线看国产| 91久久国产最好的精华液| 91在线免费播放| 97久久超碰精品国产| 99精品欧美一区| 欧美少妇性性性| 欧美日韩在线播放一区| 欧美日本视频在线| 久久久久久99久久久精品网站|