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

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

?? bmploader.java

?? WINAMP的JAVA版本
?? JAVA
字號:
package javazoom.Util;

/**
 * This class implements a BMP Loader.
 *
 *-----------------------------------------------------------------------
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *----------------------------------------------------------------------
 */

import java.awt.*;
import java.awt.image.*;
import java.io.*;

/**
 * A decoder for Windows bitmap (.BMP) files.
 * Compression not supported.
 */
public class BMPLoader
{
	private InputStream is;
	private int curPos = 0;

	private int bitmapOffset;		// starting position of image data

	private int width;				// image width in pixels
	private int height;				// image height in pixels
	private short bitsPerPixel;		// 1, 4, 8, or 24 (no color map)
	private int compression;		// 0 (none), 1 (8-bit RLE), or 2 (4-bit RLE)
	private int actualSizeOfBitmap;
	private int scanLineSize;
	private int actualColorsUsed;

	private byte r[], g[], b[];		// color palette
	private int noOfEntries;

	private byte[] byteData;		// Unpacked data
	private int[] intData;			// Unpacked data

	public BMPLoader()
	{
	}

    public Image getBMPImage(InputStream stream) throws Exception
    {
		read(stream);
		return Toolkit.getDefaultToolkit().createImage(getImageSource());
	}

	private int readInt() throws IOException {
		int b1 = is.read();
		int b2 = is.read();
		int b3 = is.read();
		int b4 = is.read();
		curPos += 4;
		return ((b4 << 24) + (b3 << 16) + (b2 << 8) + (b1 << 0));
	}


	private short readShort() throws IOException {
		int b1 = is.read();
		int b2 = is.read();
		curPos += 4;
		return (short)((b2 << 8) + b1);
	}


	void getFileHeader()  throws IOException, Exception {
		// Actual contents (14 bytes):
		short fileType = 0x4d42;// always "BM"
		int fileSize;			// size of file in bytes
		short reserved1 = 0;	// always 0
		short reserved2 = 0;	// always 0

		fileType = readShort();
		if (fileType != 0x4d42)
			throw new Exception("Not a BMP file");	// wrong file type
		fileSize = readInt();
		reserved1 = readShort();
		reserved2 = readShort();
		bitmapOffset = readInt();
	}

	void getBitmapHeader() throws IOException {

		// Actual contents (40 bytes):
		int size;				// size of this header in bytes
		short planes;			// no. of color planes: always 1
		int sizeOfBitmap;		// size of bitmap in bytes (may be 0: if so, calculate)
		int horzResolution;		// horizontal resolution, pixels/meter (may be 0)
		int vertResolution;		// vertical resolution, pixels/meter (may be 0)
		int colorsUsed;			// no. of colors in palette (if 0, calculate)
		int colorsImportant;	// no. of important colors (appear first in palette) (0 means all are important)
		boolean topDown;
		int noOfPixels;

		size = readInt();
		width = readInt();
		height = readInt();
		planes = readShort();
		bitsPerPixel = readShort();
		compression = readInt();
		sizeOfBitmap = readInt();
		horzResolution = readInt();
		vertResolution = readInt();
		colorsUsed = readInt();
		colorsImportant = readInt();

		topDown = (height < 0);
		noOfPixels = width * height;

		// Scan line is padded with zeroes to be a multiple of four bytes
		scanLineSize = ((width * bitsPerPixel + 31) / 32) * 4;

		if (sizeOfBitmap != 0)
			actualSizeOfBitmap = sizeOfBitmap;
		else
			// a value of 0 doesn't mean zero - it means we have to calculate it
			actualSizeOfBitmap = scanLineSize * height;

		if (colorsUsed != 0)
			actualColorsUsed = colorsUsed;
		else
			// a value of 0 means we determine this based on the bits per pixel
			if (bitsPerPixel < 16)
				actualColorsUsed = 1 << bitsPerPixel;
			else
				actualColorsUsed = 0;	// no palette
	}


	void getPalette() throws IOException {
		noOfEntries = actualColorsUsed;
		//IJ.write("noOfEntries: " + noOfEntries);
		if (noOfEntries>0) {
			r = new byte[noOfEntries];
			g = new byte[noOfEntries];
			b = new byte[noOfEntries];

			int reserved;
			for (int i = 0; i < noOfEntries; i++) {
				b[i] = (byte)is.read();
				g[i] = (byte)is.read();
				r[i] = (byte)is.read();
				reserved = is.read();
				curPos += 4;
			}
		}
	}

	void unpack(byte[] rawData, int rawOffset, int[] intData, int intOffset, int w) {
		int j = intOffset;
		int k = rawOffset;
		int mask = 0xff;
		for (int i = 0; i < w; i++) {
			int b0 = (((int)(rawData[k++])) & mask);
			int b1 = (((int)(rawData[k++])) & mask) << 8;
			int b2 = (((int)(rawData[k++])) & mask) << 16;
			intData[j] = 0xff000000 | b0 | b1 | b2;
			j++;
		}
	}


	void unpack(byte[] rawData, int rawOffset, int bpp,
		byte[] byteData, int byteOffset, int w) throws Exception {
		int j = byteOffset;
		int k = rawOffset;
		byte mask;
		int pixPerByte;

		switch (bpp) {
		case 1:	mask = (byte)0x01; pixPerByte = 8; break;
		case 4:	mask = (byte)0x0f; pixPerByte = 2; break;
		case 8:	mask = (byte)0xff; pixPerByte = 1; break;
		default:
			throw new Exception("Unsupported bits-per-pixel value");
		}

		for (int i = 0;;) {
			int shift = 8 - bpp;
			for (int ii = 0; ii < pixPerByte; ii++) {
				byte br = rawData[k];
				br >>= shift;
				byteData[j] = (byte)(br & mask);
				//System.out.println("Setting byteData[" + j + "]=" + Test.byteToHex(byteData[j]));
				j++;
				i++;
				if (i == w) return;
				shift -= bpp;
			}
			k++;
		}
	}


	void getPixelData() throws IOException, Exception {
		byte[] rawData;			// the raw unpacked data

		// Skip to the start of the bitmap data (if we are not already there)
		long skip = bitmapOffset - curPos;
		if (skip > 0) {
			is.skip(skip);
			curPos += skip;
		}

		int len = scanLineSize;
		if (bitsPerPixel > 8)
			intData = new int[width * height];
		else
			byteData = new byte[width * height];
		rawData = new byte[actualSizeOfBitmap];
		int rawOffset = 0;
		int offset = (height - 1) * width;
		for (int i = height - 1; i >= 0; i--) {
			int n = is.read(rawData, rawOffset, len);
			if (n < len) throw new Exception("Scan line ended prematurely after "
				+ n + " bytes");
			if (bitsPerPixel > 8) {
				// Unpack and create one int per pixel
				unpack(rawData, rawOffset, intData, offset, width);
			}
			else {
				// Unpack and create one byte per pixel
				unpack(rawData, rawOffset, bitsPerPixel,
					byteData, offset, width);
			}
			rawOffset += len;
			offset -= width;
		}
	}


	public void read(InputStream is) throws IOException, Exception {
		this.is = is;
		getFileHeader();
		getBitmapHeader();
		if (compression!=0)
			throw new Exception(" BMP Compression not supported");
		getPalette();
		getPixelData();
	}


	public MemoryImageSource getImageSource() {
		ColorModel cm;
		MemoryImageSource mis;

		if (noOfEntries > 0) {
			// There is a color palette; create an IndexColorModel
			cm = new IndexColorModel(bitsPerPixel,
					noOfEntries, r, g, b);
		} else {
			// There is no palette; use the default RGB color model
			cm = ColorModel.getRGBdefault();
		}

		// Create MemoryImageSource

		if (bitsPerPixel > 8) {
			// use one int per pixel
			mis = new MemoryImageSource(width,
				height, cm, intData, 0, width);
		} else {
			// use one byte per pixel
			mis = new MemoryImageSource(width,
				height, cm, byteData, 0, width);
		}

		return mis;	 // this can be used by Component.createImage()
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品精华液| 亚洲色图另类专区| 中文字幕精品综合| 亚洲一区二区偷拍精品| 精品亚洲成a人| 在线观看91视频| 日本一区二区成人| 日韩精品视频网| 欧洲av一区二区嗯嗯嗯啊| 国产欧美一区二区三区鸳鸯浴| 亚洲综合色在线| 99re热这里只有精品免费视频| 日韩欧美一级二级三级| 亚洲国产中文字幕| 一本久久综合亚洲鲁鲁五月天| 国产亚洲自拍一区| 老司机精品视频导航| 欧美日韩精品福利| 一区二区三区四区在线免费观看 | 欧美精选在线播放| 欧美一区二区视频观看视频| 精品成人一区二区三区四区| 99精品黄色片免费大全| 国产99久久久久久免费看农村| 欧美一区二区三区视频免费播放| 亚洲国产精品人人做人人爽| 在线视频综合导航| 亚洲在线视频一区| 欧美私人免费视频| 亚洲v日本v欧美v久久精品| 一本大道久久a久久精品综合| 综合久久久久久| 色欧美乱欧美15图片| 亚洲免费观看高清| 欧美曰成人黄网| 亚洲.国产.中文慕字在线| 欧美三级一区二区| 天堂蜜桃91精品| 欧美一区二区三区视频免费播放| 婷婷亚洲久悠悠色悠在线播放| 欧美日韩国产成人在线91| 日韩精品高清不卡| 精品日韩一区二区三区| 国产精品一区二区三区99| 欧美激情一区在线观看| kk眼镜猥琐国模调教系列一区二区| 国产精品国产三级国产有无不卡| 91在线观看视频| 亚洲最新视频在线观看| 欧美日本在线视频| 久99久精品视频免费观看| 久久精品男人的天堂| av一区二区三区四区| 亚洲与欧洲av电影| 7777精品伊人久久久大香线蕉经典版下载 | 成人性生交大片免费| 亚洲欧美一区二区在线观看| 色天使色偷偷av一区二区| 亚洲成人免费影院| 久久蜜桃av一区二区天堂 | 久久成人精品无人区| 日本一区二区三区在线观看| av电影在线不卡| 天天综合日日夜夜精品| 久久先锋影音av鲁色资源网| av不卡免费在线观看| 日本特黄久久久高潮| 国产精品拍天天在线| 欧美欧美欧美欧美| 国产不卡一区视频| 五月开心婷婷久久| 国产精品女主播av| 欧美一区二区不卡视频| 成人中文字幕电影| 日韩国产精品久久久| 国产精品日韩精品欧美在线| 在线不卡一区二区| 99天天综合性| 六月婷婷色综合| 一区二区三区高清| 国产欧美日韩久久| 欧美一区二区福利在线| 91在线精品秘密一区二区| 精品一区在线看| 香港成人在线视频| 亚洲人成精品久久久久| 精品对白一区国产伦| 欧美性三三影院| www.亚洲色图| 国产成人自拍网| 老司机精品视频线观看86| 亚洲一区二区在线免费观看视频 | 亚洲男同1069视频| 中文无字幕一区二区三区 | 91精彩视频在线观看| 国产成人啪午夜精品网站男同| 日本视频一区二区| 亚洲18女电影在线观看| 亚洲精品国产品国语在线app| 欧美韩国一区二区| 欧美精品一区二区三区高清aⅴ | 日韩欧美视频在线| 欧美性一级生活| 91免费在线看| www.亚洲人| 成人高清在线视频| 成人激情免费视频| www.99精品| 99久久亚洲一区二区三区青草| 国产精品99久| 国产白丝网站精品污在线入口| 精品一二三四区| 韩国毛片一区二区三区| 韩国视频一区二区| 国内精品自线一区二区三区视频| 全部av―极品视觉盛宴亚洲| 午夜久久久久久电影| 午夜精彩视频在线观看不卡| 天天射综合影视| 日韩精品一二三四| 久久99久久精品| 国产精品一线二线三线| 国产成人av电影在线观看| 成人亚洲一区二区一| 成人性生交大片免费| 成人激情免费视频| 在线免费观看日本欧美| 欧美人与z0zoxxxx视频| 日韩精品自拍偷拍| 国产日韩欧美综合在线| 国产精品久久毛片av大全日韩| 国产精品久久久久久久久果冻传媒| 国产日韩欧美综合在线| 国产精品免费视频观看| 亚洲愉拍自拍另类高清精品| 日韩精品亚洲专区| 国产九九视频一区二区三区| av一区二区三区四区| 欧美日韩国产片| 久久久久国产精品人| 成人欧美一区二区三区小说| 亚洲成人你懂的| 国产精品一区2区| 色呦呦日韩精品| 日韩精品自拍偷拍| 国产精品久久久久久久久快鸭| 亚洲成人av一区二区| 黄色资源网久久资源365| 91香蕉国产在线观看软件| 欧美老女人第四色| 国产日韩影视精品| 亚洲国产综合人成综合网站| 国产在线精品不卡| 欧美性一区二区| 国产日韩欧美麻豆| 午夜精品久久久久久久99水蜜桃| 国内精品国产成人| 欧美影院一区二区三区| 国产欧美一区视频| 视频一区在线播放| 成人a免费在线看| 日韩一区二区影院| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲aⅴ怡春院| 成人免费va视频| 日韩欧美一区中文| 亚洲欧美另类久久久精品| 国产真实精品久久二三区| 日本高清不卡在线观看| 日本一区二区三区dvd视频在线| 爽好久久久欧美精品| 91日韩在线专区| 国产日韩欧美精品一区| 蜜芽一区二区三区| 精品视频1区2区| 亚洲日本在线a| 丁香激情综合国产| 欧美va在线播放| 日韩成人一区二区三区在线观看| 91视视频在线观看入口直接观看www| 欧美成人精品3d动漫h| 石原莉奈一区二区三区在线观看 | 久久久国产一区二区三区四区小说| 香蕉久久一区二区不卡无毒影院| 91免费版在线| 中文字幕不卡三区| 国产精品一级二级三级| 欧美成人乱码一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 91色porny在线视频| **网站欧美大片在线观看| 国产69精品一区二区亚洲孕妇| 日韩欧美一区电影| 日本女优在线视频一区二区| www一区二区| 香蕉久久一区二区不卡无毒影院| 国产精品91xxx| 91麻豆精品国产91久久久更新时间| 国产日产亚洲精品系列| 日韩国产高清影视|