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

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

?? img_tga.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*/#include <stdlib.h>#include <stdio.h>#include <string.h>#include "SDL_endian.h"#include "SDL_image.h"#ifdef LOAD_TGA/* * A TGA loader for the SDL library * Supports: Reading 8, 15, 16, 24 and 32bpp images, with alpha or colourkey, *           uncompressed or RLE encoded. * * 2000-06-10 Mattias Engdeg錼d <f91-men@nada.kth.se>: initial version * 2000-06-26 Mattias Engdeg錼d <f91-men@nada.kth.se>: read greyscale TGAs * 2000-08-09 Mattias Engdeg錼d <f91-men@nada.kth.se>: alpha inversion removed */struct TGAheader {    Uint8 infolen;		/* length of info field */    Uint8 has_cmap;		/* 1 if image has colormap, 0 otherwise */    Uint8 type;    Uint8 cmap_start[2];	/* index of first colormap entry */    Uint8 cmap_len[2];		/* number of entries in colormap */    Uint8 cmap_bits;		/* bits per colormap entry */    Uint8 yorigin[2];		/* image origin (ignored here) */    Uint8 xorigin[2];    Uint8 width[2];		/* image size */    Uint8 height[2];    Uint8 pixel_bits;		/* bits/pixel */    Uint8 flags;};enum tga_type {    TGA_TYPE_INDEXED = 1,    TGA_TYPE_RGB = 2,    TGA_TYPE_BW = 3,    TGA_TYPE_RLE_INDEXED = 9,    TGA_TYPE_RLE_RGB = 10,    TGA_TYPE_RLE_BW = 11};#define TGA_INTERLEAVE_MASK	0xc0#define TGA_INTERLEAVE_NONE	0x00#define TGA_INTERLEAVE_2WAY	0x40#define TGA_INTERLEAVE_4WAY	0x80#define TGA_ORIGIN_MASK		0x30#define TGA_ORIGIN_LEFT		0x00#define TGA_ORIGIN_RIGHT	0x10#define TGA_ORIGIN_LOWER	0x00#define TGA_ORIGIN_UPPER	0x20/* read/write unaligned little-endian 16-bit ints */#define LE16(p) ((p)[0] + ((p)[1] << 8))#define SETLE16(p, v) ((p)[0] = (v), (p)[1] = (v) >> 8)/* Load a TGA type image from an SDL datasource */SDL_Surface *IMG_LoadTGA_RW(SDL_RWops *src){    int start;    const char *error = NULL;    struct TGAheader hdr;    int rle = 0;    int alpha = 0;    int indexed = 0;    int grey = 0;    int ckey = -1;    int ncols, w, h;    SDL_Surface *img = NULL;    Uint32 rmask, gmask, bmask, amask;    Uint8 *dst;    int i;    int bpp;    int lstep;    Uint32 pixel;    int count, rep;    if ( !src ) {        /* The error message has been set in SDL_RWFromFile */        return NULL;    }    start = SDL_RWtell(src);    if(!SDL_RWread(src, &hdr, sizeof(hdr), 1)) {        error = "Error reading TGA data";	goto error;    }    ncols = LE16(hdr.cmap_len);    switch(hdr.type) {    case TGA_TYPE_RLE_INDEXED:	rle = 1;	/* fallthrough */    case TGA_TYPE_INDEXED:	if(!hdr.has_cmap || hdr.pixel_bits != 8 || ncols > 256)	    goto unsupported;	indexed = 1;	break;    case TGA_TYPE_RLE_RGB:	rle = 1;	/* fallthrough */    case TGA_TYPE_RGB:	indexed = 0;	break;    case TGA_TYPE_RLE_BW:	rle = 1;	/* fallthrough */    case TGA_TYPE_BW:	if(hdr.pixel_bits != 8)	    goto unsupported;	/* Treat greyscale as 8bpp indexed images */	indexed = grey = 1;	break;    default:        goto unsupported;    }    bpp = (hdr.pixel_bits + 7) >> 3;    rmask = gmask = bmask = amask = 0;    switch(hdr.pixel_bits) {    case 8:	if(!indexed) {            goto unsupported;	}	break;    case 15:    case 16:	/* 15 and 16bpp both seem to use 5 bits/plane. The extra alpha bit	   is ignored for now. */	rmask = 0x7c00;	gmask = 0x03e0;	bmask = 0x001f;	break;    case 32:	alpha = 1;	/* fallthrough */    case 24:	if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {	    int s = alpha ? 0 : 8;	    amask = 0x000000ff >> s;	    rmask = 0x0000ff00 >> s;	    gmask = 0x00ff0000 >> s;	    bmask = 0xff000000 >> s;	} else {	    amask = alpha ? 0xff000000 : 0;	    rmask = 0x00ff0000;	    gmask = 0x0000ff00;	    bmask = 0x000000ff;	}	break;    default:        goto unsupported;    }    if((hdr.flags & TGA_INTERLEAVE_MASK) != TGA_INTERLEAVE_NONE       || hdr.flags & TGA_ORIGIN_RIGHT) {        goto unsupported;    }        SDL_RWseek(src, hdr.infolen, SEEK_CUR); /* skip info field */    w = LE16(hdr.width);    h = LE16(hdr.height);    img = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h,			       bpp * 8,			       rmask, gmask, bmask, amask);    if(img == NULL) {        error = "Out of memory";        goto error;    }    if(hdr.has_cmap) {	int palsiz = ncols * ((hdr.cmap_bits + 7) >> 3);	if(indexed && !grey) {	    Uint8 *pal = malloc(palsiz), *p = pal;	    SDL_Color *colors = img->format->palette->colors;	    img->format->palette->ncolors = ncols;	    SDL_RWread(src, pal, palsiz, 1);	    for(i = 0; i < ncols; i++) {		switch(hdr.cmap_bits) {		case 15:		case 16:		    {			Uint16 c = p[0] + (p[1] << 8);			p += 2;			colors[i].r = (c >> 7) & 0xf8;			colors[i].g = (c >> 2) & 0xf8;			colors[i].b = c << 3;		    }		    break;		case 24:		case 32:		    colors[i].b = *p++;		    colors[i].g = *p++;		    colors[i].r = *p++;		    if(hdr.cmap_bits == 32 && *p++ < 128)			ckey = i;		    break;		}	    }	    free(pal);	    if(ckey >= 0)		SDL_SetColorKey(img, SDL_SRCCOLORKEY, ckey);	} else {	    /* skip unneeded colormap */	    SDL_RWseek(src, palsiz, SEEK_CUR);	}    }    if(grey) {	SDL_Color *colors = img->format->palette->colors;	for(i = 0; i < 256; i++)	    colors[i].r = colors[i].g = colors[i].b = i;	img->format->palette->ncolors = 256;    }    if(hdr.flags & TGA_ORIGIN_UPPER) {	lstep = img->pitch;	dst = img->pixels;    } else {	lstep = -img->pitch;	dst = (Uint8 *)img->pixels + (h - 1) * img->pitch;    }    /* The RLE decoding code is slightly convoluted since we can't rely on       spans not to wrap across scan lines */    count = rep = 0;    for(i = 0; i < h; i++) {	if(rle) {	    int x = 0;	    for(;;) {		Uint8 c;		if(count) {		    int n = count;		    if(n > w - x)			n = w - x;		    SDL_RWread(src, dst + x * bpp, n * bpp, 1);		    count -= n;		    x += n;		    if(x == w)			break;		} else if(rep) {		    int n = rep;		    if(n > w - x)			n = w - x;		    rep -= n;		    while(n--) {			memcpy(dst + x * bpp, &pixel, bpp);			x++;		    }		    if(x == w)			break;		}		SDL_RWread(src, &c, 1, 1);		if(c & 0x80) {		    SDL_RWread(src, &pixel, bpp, 1);		    rep = (c & 0x7f) + 1;		} else {		    count = c + 1;		}	    }	} else {	    SDL_RWread(src, dst, w * bpp, 1);	}	if(SDL_BYTEORDER == SDL_BIG_ENDIAN && bpp == 2) {	    /* swap byte order */	    int x;	    Uint16 *p = (Uint16 *)dst;	    for(x = 0; x < w; x++)		p[x] = SDL_Swap16(p[x]);	}	dst += lstep;    }    return img;unsupported:    error = "Unsupported TGA format";error:    SDL_RWseek(src, start, SEEK_SET);    if ( img ) {        SDL_FreeSurface(img);    }    IMG_SetError(error);    return NULL;}#else/* dummy TGA load routine */SDL_Surface *IMG_LoadTGA_RW(SDL_RWops *src){	return(NULL);}#endif /* LOAD_TGA */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久久蜜桃| 国产福利91精品一区二区三区| 欧美日韩在线播放一区| 日韩一区精品字幕| 国产精品久久看| 精品伦理精品一区| 欧美日韩一区精品| 成人激情av网| 男女男精品网站| 亚洲国产精品一区二区www在线| 中文字幕乱码亚洲精品一区| 亚洲免费观看高清完整| 欧美艳星brazzers| www.99精品| 国产成人午夜视频| 亚洲色图制服诱惑| 色婷婷综合在线| 91精品国产综合久久蜜臀| 亚洲国产精品一区二区www| 精品乱码亚洲一区二区不卡| 欧美三级韩国三级日本一级| av高清久久久| 国产一区999| 亚洲成人免费电影| 一区二区三区在线看| 中文在线资源观看网站视频免费不卡| 日韩欧美一区二区三区在线| 欧美色欧美亚洲另类二区| av在线免费不卡| 成人av在线播放网址| 国产乱码精品一区二区三| 老色鬼精品视频在线观看播放| 午夜激情久久久| 亚洲一二三区在线观看| 一区二区三区四区高清精品免费观看 | 中文字幕精品一区| 国产视频视频一区| 欧美大胆一级视频| 欧美一区二区三区视频免费| 欧美色偷偷大香| 欧美日韩一级片网站| 91性感美女视频| 91视视频在线直接观看在线看网页在线看| 福利91精品一区二区三区| 国产精品白丝jk黑袜喷水| 国产一区二区三区日韩| 黄一区二区三区| 国产一本一道久久香蕉| 国产精品影视在线观看| 成人性生交大片| 91啪九色porn原创视频在线观看| 99国产精品久| 欧美日韩一区二区三区四区五区| 欧美在线制服丝袜| 制服丝袜亚洲播放| 久久新电视剧免费观看| 精品sm捆绑视频| 中文字幕第一区第二区| 中文字幕日韩欧美一区二区三区| 国产精品国产三级国产aⅴ无密码| 成人欧美一区二区三区小说| 亚洲激情图片qvod| 石原莉奈在线亚洲二区| 九九国产精品视频| 成人教育av在线| 欧美性感一类影片在线播放| 69堂亚洲精品首页| 欧美成人三级在线| 国产精品久久免费看| 亚洲午夜久久久| 激情综合亚洲精品| 成人动漫在线一区| 欧美巨大另类极品videosbest | 欧美一区二区精品久久911| 日韩欧美综合一区| 欧美国产成人精品| 午夜精品福利视频网站| 国产综合色视频| 91一区在线观看| 宅男在线国产精品| 国产精品欧美综合在线| 亚洲18女电影在线观看| 国产高清精品久久久久| 色系网站成人免费| 久久午夜国产精品| 亚洲最新视频在线播放| 国产麻豆9l精品三级站| 欧美无砖专区一中文字| 久久久国产精华| 五月激情综合婷婷| 成人免费黄色大片| 日韩午夜精品视频| 一区二区三区精品视频| 国产乱码精品一区二区三区五月婷| 91麻豆免费看| 久久久久九九视频| 五月天丁香久久| 色综合激情久久| 欧美激情一区二区三区四区 | 波多野结衣中文一区| 在线成人av影院| 亚洲区小说区图片区qvod| 激情丁香综合五月| 91精品午夜视频| 亚洲国产精品一区二区久久恐怖片 | 在线不卡欧美精品一区二区三区| 亚洲国产精品ⅴa在线观看| 免费精品99久久国产综合精品| 91捆绑美女网站| 国产精品看片你懂得| 国产一区二区看久久| 91麻豆精品国产91久久久资源速度| 国产精品福利一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 在线视频国内自拍亚洲视频| 中文字幕av在线一区二区三区| 久久 天天综合| 911精品国产一区二区在线| 亚洲女性喷水在线观看一区| 成人av免费在线| 国产日韩欧美精品电影三级在线| 美女性感视频久久| 欧美一卡2卡3卡4卡| 亚洲v中文字幕| 欧美伊人久久久久久久久影院| 亚洲视频网在线直播| 成人性视频网站| 国产精品你懂的在线| 国产精品主播直播| 久久久国产精品不卡| 国产一区二区三区观看| 精品国产一区二区国模嫣然| 蜜臀久久99精品久久久画质超高清| 欧美午夜片在线看| 亚洲国产精品自拍| 欧美日韩国产综合视频在线观看| 亚洲一区影音先锋| 91黄色激情网站| 亚洲狠狠爱一区二区三区| 欧美亚洲图片小说| 亚洲国产精品一区二区久久恐怖片 | 激情五月婷婷综合网| 26uuu另类欧美| 国产高清一区日本| 亚洲国产精品二十页| av亚洲产国偷v产偷v自拍| 亚洲欧美日韩在线| 欧美视频一区二| 天天综合天天综合色| 在线播放国产精品二区一二区四区| 天堂影院一区二区| 欧美一区二区三区日韩视频| 美女免费视频一区| 日本一区二区电影| 91麻豆精东视频| 五月天亚洲婷婷| 欧美xxxxx牲另类人与| 国产伦精品一区二区三区在线观看 | 亚洲一区国产视频| 在线电影院国产精品| 国产在线国偷精品免费看| 久久精品网站免费观看| 成人18视频在线播放| 亚洲综合在线视频| 日韩欧美一二区| 从欧美一区二区三区| 亚洲人成网站在线| 日韩一区二区精品在线观看| 国产精品一区二区免费不卡| 综合在线观看色| 欧美日韩视频第一区| 精品一区二区在线观看| 国产精品嫩草影院com| 欧美另类一区二区三区| 国产精品一区二区在线播放| ●精品国产综合乱码久久久久| 欧美系列一区二区| 国产一区二区不卡在线| 亚洲精品成人少妇| 久久先锋影音av鲁色资源| 日本精品免费观看高清观看| 蜜臀精品一区二区三区在线观看 | 亚洲激情五月婷婷| 欧美精品一区视频| 日本道精品一区二区三区| 精品一区二区三区在线播放 | 国产尤物一区二区| 亚洲国产日韩av| 国产精品午夜免费| 欧美精品一卡二卡| 91免费版在线看| 久久精品国产99国产精品| 一区二区在线观看免费视频播放 | 中文乱码免费一区二区| 717成人午夜免费福利电影| 99久久精品一区二区| 韩国精品免费视频| 亚洲国产精品人人做人人爽| 国产精品美女久久久久高潮| 日韩欧美在线综合网|