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

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

?? img_tif.c

?? It is extension program for SDL to display images other than bmp, but all the other formats.
?? C
字號:
/*    SDL_image:  An example image loading library for use with SDL    Copyright (C) 1997-2006 Sam Lantinga    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Lesser General Public    License as published by the Free Software Foundation; either    version 2.1 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Lesser General Public License for more details.    You should have received a copy of the GNU Lesser General Public    License along with this library; if not, write to the Free Software    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA    Sam Lantinga    slouken@libsdl.org*//* This is a TIFF image file loading framework */#include <stdio.h>#include "SDL_image.h"#ifdef LOAD_TIF#include <tiffio.h>static struct {	int loaded;	void *handle;	TIFF* (*TIFFClientOpen)(const char*, const char*, thandle_t, TIFFReadWriteProc, TIFFReadWriteProc, TIFFSeekProc, TIFFCloseProc, TIFFSizeProc, TIFFMapFileProc, TIFFUnmapFileProc);	void (*TIFFClose)(TIFF*);	int (*TIFFGetField)(TIFF*, ttag_t, ...);	int (*TIFFReadRGBAImage)(TIFF*, uint32, uint32, uint32*, int);	TIFFErrorHandler (*TIFFSetErrorHandler)(TIFFErrorHandler);} lib;#ifdef LOAD_TIF_DYNAMICint IMG_InitTIF(){	if ( lib.loaded == 0 ) {		lib.handle = SDL_LoadObject(LOAD_TIF_DYNAMIC);		if ( lib.handle == NULL ) {			return -1;		}		lib.TIFFClientOpen =			(TIFF* (*)(const char*, const char*, thandle_t, TIFFReadWriteProc, TIFFReadWriteProc, TIFFSeekProc, TIFFCloseProc, TIFFSizeProc, TIFFMapFileProc, TIFFUnmapFileProc))			SDL_LoadFunction(lib.handle, "TIFFClientOpen");		if ( lib.TIFFClientOpen == NULL ) {			SDL_UnloadObject(lib.handle);			return -1;		}		lib.TIFFClose =			(void (*)(TIFF*))			SDL_LoadFunction(lib.handle, "TIFFClose");		if ( lib.TIFFClose == NULL ) {			SDL_UnloadObject(lib.handle);			return -1;		}		lib.TIFFGetField =			(int (*)(TIFF*, ttag_t, ...))			SDL_LoadFunction(lib.handle, "TIFFGetField");		if ( lib.TIFFGetField == NULL ) {			SDL_UnloadObject(lib.handle);			return -1;		}		lib.TIFFReadRGBAImage =			(int (*)(TIFF*, uint32, uint32, uint32*, int))			SDL_LoadFunction(lib.handle, "TIFFReadRGBAImage");		if ( lib.TIFFReadRGBAImage == NULL ) {			SDL_UnloadObject(lib.handle);			return -1;		}		lib.TIFFSetErrorHandler =			(TIFFErrorHandler (*)(TIFFErrorHandler))			SDL_LoadFunction(lib.handle, "TIFFSetErrorHandler");		if ( lib.TIFFSetErrorHandler == NULL ) {			SDL_UnloadObject(lib.handle);			return -1;		}	}	++lib.loaded;	return 0;}void IMG_QuitTIF(){	if ( lib.loaded == 0 ) {		return;	}	if ( lib.loaded == 1 ) {		SDL_UnloadObject(lib.handle);	}	--lib.loaded;}#elseint IMG_InitTIF(){	if ( lib.loaded == 0 ) {		lib.TIFFClientOpen = TIFFClientOpen;		lib.TIFFClose = TIFFClose;		lib.TIFFGetField = TIFFGetField;		lib.TIFFReadRGBAImage = TIFFReadRGBAImage;		lib.TIFFSetErrorHandler = TIFFSetErrorHandler;	}	++lib.loaded;	return 0;}void IMG_QuitTIF(){	if ( lib.loaded == 0 ) {		return;	}	if ( lib.loaded == 1 ) {	}	--lib.loaded;}#endif /* LOAD_TIF_DYNAMIC *//* * These are the thunking routine to use the SDL_RWops* routines from * libtiff's internals.*/static tsize_t tiff_read(thandle_t fd, tdata_t buf, tsize_t size){	return SDL_RWread((SDL_RWops*)fd, buf, 1, size);}static toff_t tiff_seek(thandle_t fd, toff_t offset, int origin){	return SDL_RWseek((SDL_RWops*)fd, offset, origin);}static tsize_t tiff_write(thandle_t fd, tdata_t buf, tsize_t size){	return SDL_RWwrite((SDL_RWops*)fd, buf, 1, size);}static int tiff_close(thandle_t fd){	/*	 * We don't want libtiff closing our SDL_RWops*, but if it's not given         * a routine to try, and if the image isn't a TIFF, it'll segfault.	 */	return 0;}static int tiff_map(thandle_t fd, tdata_t* pbase, toff_t* psize){	return (0);}static void tiff_unmap(thandle_t fd, tdata_t base, toff_t size){	return;}static toff_t tiff_size(thandle_t fd){	Uint32 save_pos;	toff_t size;	save_pos = SDL_RWtell((SDL_RWops*)fd);	SDL_RWseek((SDL_RWops*)fd, 0, SEEK_END);        size = SDL_RWtell((SDL_RWops*)fd);	SDL_RWseek((SDL_RWops*)fd, save_pos, SEEK_SET);	return size;}int IMG_isTIF(SDL_RWops* src){	int start;	int is_TIF;	Uint8 magic[4];	if ( !src )		return 0;	start = SDL_RWtell(src);	is_TIF = 0;	if ( SDL_RWread(src, magic, 1, sizeof(magic)) == sizeof(magic) ) {		if ( (magic[0] == 'I' &&                      magic[1] == 'I' &&		      magic[2] == 0x2a &&                      magic[3] == 0x00) ||		     (magic[0] == 'M' &&                      magic[1] == 'M' &&		      magic[2] == 0x00 &&                      magic[3] == 0x2a) ) {			is_TIF = 1;		}	}	SDL_RWseek(src, start, SEEK_SET);	return(is_TIF);}SDL_Surface* IMG_LoadTIF_RW(SDL_RWops* src){	int start;	TIFF* tiff;	SDL_Surface* surface = NULL;	Uint32 img_width, img_height;	Uint32 Rmask, Gmask, Bmask, Amask;	Uint32 x, y;	Uint32 half;	if ( !src ) {		/* The error message has been set in SDL_RWFromFile */		return NULL;	}	start = SDL_RWtell(src);	if ( IMG_InitTIF() < 0 ) {		return NULL;	}	/* turn off memory mapped access with the m flag */	tiff = lib.TIFFClientOpen("SDL_image", "rm", (thandle_t)src, 		tiff_read, tiff_write, tiff_seek, tiff_close, tiff_size, tiff_map, tiff_unmap);	if(!tiff)		goto error;	/* Retrieve the dimensions of the image from the TIFF tags */	lib.TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &img_width);	lib.TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &img_height);	Rmask = 0x000000FF;	Gmask = 0x0000FF00;	Bmask = 0x00FF0000;	Amask = 0xFF000000;	surface = SDL_AllocSurface(SDL_SWSURFACE, img_width, img_height, 32,		Rmask, Gmask, Bmask, Amask);	if(!surface)		goto error;		if(!lib.TIFFReadRGBAImage(tiff, img_width, img_height, surface->pixels, 0))		goto error;	/* libtiff loads the image upside-down, flip it back */	half = img_height / 2;	for(y = 0; y < half; y++)	{	        Uint32 *top = (Uint32 *)surface->pixels + y * surface->pitch/4;	        Uint32 *bot = (Uint32 *)surface->pixels		              + (img_height - y - 1) * surface->pitch/4;		for(x = 0; x < img_width; x++)		{		        Uint32 tmp = top[x];			top[x] = bot[x];			bot[x] = tmp;		}	}	lib.TIFFClose(tiff);	IMG_QuitTIF();		return surface;error:	SDL_RWseek(src, start, SEEK_SET);	if ( surface ) {		SDL_FreeSurface(surface);	}	IMG_QuitTIF();	return NULL;}#else/* See if an image is contained in a data source */int IMG_isTIF(SDL_RWops *src){	return(0);}/* Load a TIFF type image from an SDL datasource */SDL_Surface *IMG_LoadTIF_RW(SDL_RWops *src){	return(NULL);}#endif /* LOAD_TIF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合久久久久综合| 色综合视频在线观看| 91精品国产综合久久精品app| 中文字幕亚洲一区二区va在线| 激情综合五月婷婷| 亚洲成人免费影院| 日韩欧美激情在线| 粉嫩aⅴ一区二区三区四区五区| 亚洲欧美影音先锋| 欧美日韩一区二区三区不卡| 亚洲一二三区不卡| 欧美一区二区三区人| 国产麻豆成人传媒免费观看| 欧美激情综合在线| 欧美图片一区二区三区| 毛片一区二区三区| 国产精品理伦片| 欧美日韩国产经典色站一区二区三区 | 国产一区二区三区免费在线观看| 国产色爱av资源综合区| 欧美无砖专区一中文字| 精品系列免费在线观看| 最新国产精品久久精品| thepron国产精品| 免费三级欧美电影| 亚洲一区二区在线播放相泽| 欧美三级电影在线看| 六月丁香婷婷久久| 亚洲视频狠狠干| 国产亚洲美州欧州综合国 | 国产精品国产精品国产专区不片| 制服.丝袜.亚洲.中文.综合| av一区二区三区在线| 国产精品久久久久久久午夜片 | 国内精品视频666| 国产精品毛片无遮挡高清| 日韩一区二区三区免费观看| 粉嫩av一区二区三区在线播放| 日韩综合小视频| 亚洲特级片在线| 欧美国产精品久久| 国产亚洲精品aa| 精品国产欧美一区二区| 欧美日韩夫妻久久| 欧美军同video69gay| 在线不卡一区二区| 91精品福利在线| 一本一本大道香蕉久在线精品| www.亚洲在线| 色激情天天射综合网| 在线免费观看一区| 欧美久久久久久蜜桃| 欧美精品色综合| 日韩精品中午字幕| 亚洲视频免费看| 亚洲欧美一区二区不卡| 亚洲乱码国产乱码精品精小说| 一区二区三区日韩欧美| 青青草97国产精品免费观看 | 国产精品国产三级国产a| 日韩一区日韩二区| 亚洲第一av色| 国产一区二区美女诱惑| 国产黄人亚洲片| 在线观看日韩毛片| 精品日韩一区二区三区免费视频| 久久久99精品免费观看不卡| 亚洲图片另类小说| 久久精品国产澳门| 96av麻豆蜜桃一区二区| 日韩视频免费观看高清完整版| 久久青草欧美一区二区三区| 亚洲在线观看免费| 99久久精品免费看国产免费软件| 欧美挠脚心视频网站| 国产欧美一区二区三区在线老狼| 一区二区三区四区激情| 寂寞少妇一区二区三区| 91麻豆国产精品久久| 成人教育av在线| 91丨九色丨黑人外教| 久久久久久9999| 美女mm1313爽爽久久久蜜臀| 欧美综合欧美视频| 中文字幕一区二区三区不卡| 精品一区二区三区视频在线观看| 欧美专区亚洲专区| 亚洲欧洲国产日本综合| 粉嫩久久99精品久久久久久夜| 精品福利av导航| 蜜臀精品久久久久久蜜臀 | 欧美日韩情趣电影| 亚洲成av人影院| 精品视频在线免费观看| 国产成人午夜片在线观看高清观看| 欧美日韩在线亚洲一区蜜芽| 国产精品色噜噜| 高清shemale亚洲人妖| 久久婷婷成人综合色| 久久99热国产| 国产欧美1区2区3区| 成人av网站在线观看| 亚洲日本在线a| 欧美理论在线播放| 久久91精品国产91久久小草| 日韩欧美视频一区| 高潮精品一区videoshd| 亚洲啪啪综合av一区二区三区| 色欧美88888久久久久久影院| 亚洲影院理伦片| 日韩欧美123| 成人h动漫精品一区二区| 亚洲一本大道在线| 国产无一区二区| 欧美在线|欧美| 国产成人综合在线| 亚洲123区在线观看| 国产精品午夜在线观看| 欧美日韩黄色影视| 粉嫩嫩av羞羞动漫久久久| 水蜜桃久久夜色精品一区的特点| 国产日韩亚洲欧美综合| 337p亚洲精品色噜噜狠狠| 99riav久久精品riav| 蜜桃传媒麻豆第一区在线观看| 中文字幕视频一区二区三区久| 日韩一级免费观看| 欧美亚洲综合在线| 99久久久国产精品| 国产成人精品免费网站| 久久成人18免费观看| 亚洲一区二区三区国产| 中文字幕在线免费不卡| 久久久99久久| 国产精品久久三| 日日嗨av一区二区三区四区| 国产a级毛片一区| 九一久久久久久| 亚洲国产精品激情在线观看| 麻豆精品在线观看| 日韩欧美亚洲国产精品字幕久久久| 欧美日韩一区久久| 日本一区二区免费在线| 亚洲精品国产无套在线观| 日本欧美在线观看| 福利一区二区在线观看| 欧美一区二区三区在线看| 国产精品久久免费看| 日韩极品在线观看| 99久久er热在这里只有精品66| 欧美精品vⅰdeose4hd| 欧美激情一区二区三区在线| 久久丝袜美腿综合| 亚洲欧美另类在线| 久久精品国产精品亚洲精品| 国产福利电影一区二区三区| 91亚洲精华国产精华精华液| 一区二区高清视频在线观看| 日韩综合一区二区| 日韩电影网1区2区| 久久综合九色综合欧美就去吻| 国产日韩精品一区| 国产精品久久久一区麻豆最新章节| 中文字幕在线观看不卡| 国产欧美精品一区二区色综合| 国产精品久久影院| 麻豆91在线播放免费| 欧美色爱综合网| 亚洲少妇最新在线视频| 精品一区二区久久| 欧美一区二区三区视频免费播放| 欧美国产激情一区二区三区蜜月| 亚洲国产欧美一区二区三区丁香婷| 韩国成人精品a∨在线观看| 欧洲日韩一区二区三区| 中文字幕av一区二区三区免费看| 美女一区二区三区在线观看| 欧美视频一区在线| 依依成人精品视频| 一本大道av伊人久久综合| 欧美激情在线观看视频免费| 久久99精品国产| 日韩午夜在线观看| 久久丝袜美腿综合| 久88久久88久久久| 久久亚洲精品国产精品紫薇| 国产一区二区在线视频| 久久综合视频网| 国产精品99久久久久久似苏梦涵| 日韩精品一区二区三区视频在线观看 | 亚洲成a人片综合在线| 制服丝袜中文字幕一区| 国产91丝袜在线观看| 亚洲另类中文字| 精品播放一区二区| 99久久国产免费看| 无码av中文一区二区三区桃花岛| 91精品国产色综合久久| 成人在线一区二区三区| 视频一区二区三区入口|