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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gifdecoder.java

?? 個人Blog java編寫的Blog可以直接使用!
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:

		datum = bits = count = first = top = pi = bi = 0;

		for (i = 0; i < npix;) {
			if (top == 0) {
				if (bits < code_size) {
					//  Load bytes until there are enough bits for a code.
					if (count == 0) {
						// Read a new data block.
						count = readBlock();
						if (count <= 0)
							break;
						bi = 0;
					}
					datum += (((int) block[bi]) & 0xff) << bits;
					bits += 8;
					bi++;
					count--;
					continue;
				}

				//  Get the next code.

				code = datum & code_mask;
				datum >>= code_size;
				bits -= code_size;

				//  Interpret the code

				if ((code > available) || (code == end_of_information))
					break;
				if (code == clear) {
					//  Reset decoder.
					code_size = data_size + 1;
					code_mask = (1 << code_size) - 1;
					available = clear + 2;
					old_code = NullCode;
					continue;
				}
				if (old_code == NullCode) {
					pixelStack[top++] = suffix[code];
					old_code = code;
					first = code;
					continue;
				}
				in_code = code;
				if (code == available) {
					pixelStack[top++] = (byte) first;
					code = old_code;
				}
				while (code > clear) {
					pixelStack[top++] = suffix[code];
					code = prefix[code];
				}
				first = ((int) suffix[code]) & 0xff;

				//  Add a new string to the string table,

				if (available >= MaxStackSize)
					break;
				pixelStack[top++] = (byte) first;
				prefix[available] = (short) old_code;
				suffix[available] = (byte) first;
				available++;
				if (((available & code_mask) == 0)
					&& (available < MaxStackSize)) {
					code_size++;
					code_mask += available;
				}
				old_code = in_code;
			}

			//  Pop a pixel off the pixel stack.

			top--;
			pixels[pi++] = pixelStack[top];
			i++;
		}

		for (i = pi; i < npix; i++) {
			pixels[i] = 0; // clear missing pixels
		}

	}

	/**
	 * Returns true if an error was encountered during reading/decoding
	 */
	protected boolean err() {
		return status != STATUS_OK;
	}

	/**
	 * Initializes or re-initializes reader
	 */
	protected void init() {
		status = STATUS_OK;
		frameCount = 0;
		frames = new ArrayList();
		gct = null;
		lct = null;
	}

	/**
	 * Reads a single byte from the input stream.
	 */
	protected int read() {
		int curByte = 0;
		try {
			curByte = in.read();
		} catch (IOException e) {
			status = STATUS_FORMAT_ERROR;
		}
		return curByte;
	}

	/**
	 * Reads next variable length block from input.
	 *
	 * @return number of bytes stored in "buffer"
	 */
	protected int readBlock() {
		blockSize = read();
		int n = 0;
		if (blockSize > 0) {
			try {
				int count = 0;
				while (n < blockSize) {
					count = in.read(block, n, blockSize - n);
					if (count == -1) 
						break;
					n += count;
				}
			} catch (IOException e) {
			}

			if (n < blockSize) {
				status = STATUS_FORMAT_ERROR;
			}
		}
		return n;
	}

	/**
	 * Reads color table as 256 RGB integer values
	 *
	 * @param ncolors int number of colors to read
	 * @return int array containing 256 colors (packed ARGB with full alpha)
	 */
	protected int[] readColorTable(int ncolors) {
		int nbytes = 3 * ncolors;
		int[] tab = null;
		byte[] c = new byte[nbytes];
		int n = 0;
		try {
			n = in.read(c);
		} catch (IOException e) {
		}
		if (n < nbytes) {
			status = STATUS_FORMAT_ERROR;
		} else {
			tab = new int[256]; // max size to avoid bounds checks
			int i = 0;
			int j = 0;
			while (i < ncolors) {
				int r = ((int) c[j++]) & 0xff;
				int g = ((int) c[j++]) & 0xff;
				int b = ((int) c[j++]) & 0xff;
				tab[i++] = 0xff000000 | (r << 16) | (g << 8) | b;
			}
		}
		return tab;
	}

	/**
	 * Main file parser.  Reads GIF content blocks.
	 */
	protected void readContents() {
		// read GIF file content blocks
		boolean done = false;
		while (!(done || err())) {
			int code = read();
			switch (code) {

				case 0x2C : // image separator
					readImage();
					break;

				case 0x21 : // extension
					code = read();
					switch (code) {
						case 0xf9 : // graphics control extension
							readGraphicControlExt();
							break;

						case 0xff : // application extension
							readBlock();
							String app = "";
							for (int i = 0; i < 11; i++) {
								app += (char) block[i];
							}
							if (app.equals("NETSCAPE2.0")) {
								readNetscapeExt();
							}
							else
								skip(); // don't care
							break;

						default : // uninteresting extension
							skip();
					}
					break;

				case 0x3b : // terminator
					done = true;
					break;

				case 0x00 : // bad byte, but keep going and see what happens
					break;

				default :
					status = STATUS_FORMAT_ERROR;
			}
		}
	}

	/**
	 * Reads Graphics Control Extension values
	 */
	protected void readGraphicControlExt() {
		read(); // block size
		int packed = read(); // packed fields
		dispose = (packed & 0x1c) >> 2; // disposal method
		if (dispose == 0) {
			dispose = 1; // elect to keep old image if discretionary
		}
		transparency = (packed & 1) != 0;
		delay = readShort() * 10; // delay in milliseconds
		transIndex = read(); // transparent color index
		read(); // block terminator
	}

	/**
	 * Reads GIF file header information.
	 */
	protected void readHeader() {
		String id = "";
		for (int i = 0; i < 6; i++) {
			id += (char) read();
		}
		if (!id.startsWith("GIF")) {
			status = STATUS_FORMAT_ERROR;
			return;
		}

		readLSD();
		if (gctFlag && !err()) {
			gct = readColorTable(gctSize);
			bgColor = gct[bgIndex];
		}
	}

	/**
	 * Reads next frame image
	 */
	protected void readImage() {
		ix = readShort(); // (sub)image position & size
		iy = readShort();
		iw = readShort();
		ih = readShort();

		int packed = read();
		lctFlag = (packed & 0x80) != 0; // 1 - local color table flag
		interlace = (packed & 0x40) != 0; // 2 - interlace flag
		// 3 - sort flag
		// 4-5 - reserved
		lctSize = 2 << (packed & 7); // 6-8 - local color table size

		if (lctFlag) {
			lct = readColorTable(lctSize); // read table
			act = lct; // make local table active
		} else {
			act = gct; // make global table active
			if (bgIndex == transIndex)
				bgColor = 0;
		}
		int save = 0;
		if (transparency) {
			save = act[transIndex];
			act[transIndex] = 0; // set transparent color if specified
		}

		if (act == null) {
			status = STATUS_FORMAT_ERROR; // no color table defined
		}

		if (err()) return;

		decodeImageData(); // decode pixel data
		skip();

		if (err()) return;

		frameCount++;

		// create new image to receive frame data
		image =
			new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);

		setPixels(); // transfer pixel data to image

		frames.add(new GifFrame(image, delay)); // add image to frame list

		if (transparency) {
			act[transIndex] = save;
		}
		resetFrame();

	}

	/**
	 * Reads Logical Screen Descriptor
	 */
	protected void readLSD() {

		// logical screen size
		width = readShort();
		height = readShort();

		// packed fields
		int packed = read();
		gctFlag = (packed & 0x80) != 0; // 1   : global color table flag
		// 2-4 : color resolution
		// 5   : gct sort flag
		gctSize = 2 << (packed & 7); // 6-8 : gct size

		bgIndex = read(); // background color index
		pixelAspect = read(); // pixel aspect ratio
	}

	/**
	 * Reads Netscape extenstion to obtain iteration count
	 */
	protected void readNetscapeExt() {
		do {
			readBlock();
			if (block[0] == 1) {
				// loop count sub-block
				int b1 = ((int) block[1]) & 0xff;
				int b2 = ((int) block[2]) & 0xff;
				loopCount = (b2 << 8) | b1;
			}
		} while ((blockSize > 0) && !err());
	}

	/**
	 * Reads next 16-bit value, LSB first
	 */
	protected int readShort() {
		// read 16-bit value, LSB first
		return read() | (read() << 8);
	}

	/**
	 * Resets frame state for reading next image.
	 */
	protected void resetFrame() {
		lastDispose = dispose;
		lastRect = new Rectangle(ix, iy, iw, ih);
		lastImage = image;
		lastBgColor = bgColor;
		dispose = 0;
		transparency = false;
		delay = 0;
		lct = null;
	}

	/**
	 * Skips variable length blocks up to and including
	 * next zero length block.
	 */
	protected void skip() {
		do {
			readBlock();
		} while ((blockSize > 0) && !err());
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线日韩欧美| 最好看的中文字幕久久| 国产无人区一区二区三区| 亚洲视频中文字幕| 国产原创一区二区| 欧美日韩一区精品| 国产日韩欧美在线一区| 亚洲丰满少妇videoshd| 成人美女视频在线观看| 97se亚洲国产综合自在线不卡| 日韩欧美色综合| 亚洲一本大道在线| 99精品偷自拍| 久久久精品人体av艺术| 丝袜脚交一区二区| 欧美性猛交xxxxxx富婆| 欧美高清在线精品一区| 韩国精品久久久| 在线不卡一区二区| 亚洲一区在线看| 色噜噜狠狠成人网p站| 中日韩免费视频中文字幕| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲无人区一区| jlzzjlzz国产精品久久| 2024国产精品| 蜜桃av噜噜一区二区三区小说| 欧美日韩国产三级| 亚洲无人区一区| 欧美日韩国产不卡| 午夜精品成人在线| 欧美精品1区2区3区| 亚洲chinese男男1069| 日本道色综合久久| 一区二区三区不卡视频在线观看 | 日韩vs国产vs欧美| 欧美日韩高清在线| 日日噜噜夜夜狠狠视频欧美人| 欧美天堂一区二区三区| 亚洲国产精品欧美一二99| 欧洲视频一区二区| 亚洲国产欧美日韩另类综合| 欧美日韩三级一区二区| 三级不卡在线观看| 日韩视频免费直播| 精品午夜久久福利影院| 国产欧美一区二区精品性色超碰| 国产精品一级片| 国产精品国产三级国产aⅴ原创 | 欧美主播一区二区三区| 一区二区在线观看视频在线观看| 欧美va天堂va视频va在线| 日韩在线一二三区| 日韩精品中午字幕| 国产精品正在播放| 亚洲色图色小说| 欧美日韩高清影院| 九九在线精品视频| 国产精品久久夜| 在线免费不卡电影| 九九**精品视频免费播放| 久久久久99精品国产片| 91视频在线观看免费| 亚洲国产综合在线| 久久日韩粉嫩一区二区三区 | 久久久久久麻豆| 91在线视频免费观看| 日韩精品亚洲专区| 国产亚洲精品bt天堂精选| 色噜噜偷拍精品综合在线| 日韩二区三区四区| ...av二区三区久久精品| 欧美色偷偷大香| 国产乱一区二区| 曰韩精品一区二区| 欧美精品一区二区精品网| 91麻豆免费视频| 麻豆精品视频在线观看视频| 欧美韩日一区二区三区四区| 欧美色图天堂网| 国产福利91精品| 秋霞午夜av一区二区三区| 国产欧美日韩在线看| 欧美日韩日日骚| av中文字幕在线不卡| 青青草精品视频| 亚洲欧美日韩在线| 久久蜜桃av一区二区天堂| 在线中文字幕一区二区| 懂色av一区二区夜夜嗨| 日韩电影在线一区二区三区| 亚洲欧洲国产日本综合| 欧美不卡一区二区三区四区| 欧美视频一区二区三区四区| 成人综合婷婷国产精品久久蜜臀 | 日韩午夜精品视频| 欧美综合亚洲图片综合区| 成人激情视频网站| 韩国精品免费视频| 美国一区二区三区在线播放| 亚洲欧美视频在线观看| 国产色91在线| 日韩欧美国产综合在线一区二区三区| 91福利视频在线| 99综合电影在线视频| 韩国v欧美v日本v亚洲v| 麻豆视频一区二区| 日本最新不卡在线| 日日夜夜精品视频天天综合网| 亚洲欧美视频在线观看| **性色生活片久久毛片| 国产精品久久久久久久久久久免费看| 26uuu久久综合| 久久伊人中文字幕| www一区二区| 久久免费美女视频| 久久综合九色欧美综合狠狠| 欧美一区二区三区免费在线看| 欧美日韩国产高清一区二区三区| 欧美少妇性性性| 欧美美女激情18p| 欧美一区二区黄| 日韩免费视频一区二区| 日韩免费一区二区三区在线播放| 精品美女一区二区三区| 久久伊人中文字幕| 中文字幕免费观看一区| 国产精品久久久久久久久免费相片| 国产精品久久久久久久久久久免费看| 中文字幕在线免费不卡| 一区二区三区四区高清精品免费观看 | 亚洲gay无套男同| 免费不卡在线视频| 久久99久久99| 国产99一区视频免费| 成人精品视频一区二区三区尤物| 成人一区二区三区视频 | 国产喂奶挤奶一区二区三区| 国产精品女主播av| 亚洲激情网站免费观看| 丝袜亚洲精品中文字幕一区| 激情久久五月天| 国产91精品一区二区麻豆网站| 91麻豆精东视频| 欧美精品在欧美一区二区少妇| 欧美精品一区二区三| 中文字幕中文乱码欧美一区二区| 亚洲香蕉伊在人在线观| 精品亚洲porn| 日本韩国一区二区三区视频| 日韩一区二区三免费高清| 国产午夜三级一区二区三| 亚洲男人的天堂在线aⅴ视频| 天天色综合成人网| 国产成人综合在线观看| 欧美日韩三级在线| 国产免费久久精品| 亚洲一二三区视频在线观看| 韩国女主播成人在线| 在线观看av一区二区| 日韩免费视频一区| 亚洲精品国产高清久久伦理二区| 欧美aⅴ一区二区三区视频| 国产电影一区在线| 欧美精品免费视频| 国产精品久久综合| 蜜臂av日日欢夜夜爽一区| 99久久综合色| 欧美一级黄色录像| 伊人夜夜躁av伊人久久| 国产精品一级片在线观看| 3d成人动漫网站| 亚洲精品中文字幕乱码三区| 国产馆精品极品| 91精品久久久久久蜜臀| 亚洲欧美日韩系列| 国产成人在线观看免费网站| 欧美精选午夜久久久乱码6080| 中文字幕日韩一区| 狠狠久久亚洲欧美| 91精品国产色综合久久不卡电影 | 精品国产伦一区二区三区免费| 一区二区三区在线不卡| 国产成人8x视频一区二区| 制服丝袜成人动漫| 亚洲一区二区三区影院| 99国产欧美另类久久久精品| 久久久不卡网国产精品二区| 日韩专区一卡二卡| 欧美在线视频全部完| 亚洲免费观看高清完整| 成人爽a毛片一区二区免费| 久久亚洲私人国产精品va媚药| 蜜桃久久久久久久| 91精品国产手机| 日韩电影在线看| 91精品欧美综合在线观看最新| 亚洲国产成人av网| 在线视频一区二区三| 亚洲国产精品久久人人爱|