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

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

?? gifcom.java

?? 利用lzw算法將.bmp圖像文件壓縮成.gif文件 點擊打開載入圖像
?? JAVA
字號:
package gifcode;

import java.io.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class GIFCom extends JFrame implements ActionListener{

	protected int width; // image size
	protected int height;
	protected Color transparent = null; // transparent color
	protected int transIndex; // transparent index in color table
	protected boolean started = false; // ready to output frames
	protected OutputStream out;
	protected BufferedImage image;
	protected byte[] pixels; // BGR byte array from frame
	protected byte[] indexedPixels; // converted frame indexed to palette
	protected int colorDepth; // number of bit planes
	protected byte[] colorTab; // RGB palette
	protected boolean[] usedEntry = new boolean[256]; // active palette entries
	protected int palSize = 7; // color table size (bits-1)
	protected int dispose = -1; 
	protected boolean closeStream = false; // close stream when finished
	protected boolean isImage = true;
	protected boolean sizeSet = false; 
	protected int sample = 10; 

	String filesplit=new String();
	JButton buttonCom=new JButton("打開");
	JButton buttonDecom=new JButton("壓縮");
	JLabel labelMes=new JLabel();
	JFileChooser fc=new JFileChooser();
	JPanel panel=new JPanel();
	BufferedImage src;
	String filename;
	
	GIFCom(){
		super("GIF壓縮演示");
		Container con=this.getContentPane();
		con.setLayout(new BorderLayout());
		panel.add(buttonCom);
		panel.add(buttonDecom);
		buttonCom.addActionListener(this);
		buttonDecom.addActionListener(this);
		con.add(panel,"South");
		con.add(labelMes,"Center");
		this.setSize(600, 450);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public boolean toGIF(BufferedImage im) {
		if ((im == null) || !started) {
			return false;
		}
		boolean ok = true;
		try {
			if (!sizeSet) {
				setImgSize(im.getWidth(), im.getHeight());
			}
			image = im;
			getImagePixels(); 
			analyzePixels(); 
			if (isImage) {
				writeLSD(); 
				writePalette(); 
			}
			writeGraphicCtrlExt(); 
			writeImageDesc(); 
			if (!isImage) {
				writePalette(); 
			}
			writePixels(); 
			isImage = false;
		} catch (IOException e) {
			ok = false;
		}

		return ok;
	}
	
	public boolean FileTailer() {
		if (!started) return false;
		boolean ok = true;
		started = false;
		try {
			out.write(0x3b);
			out.flush();
			if (closeStream) {
				out.close();
			}
		} catch (IOException e) {
			ok = false;
		}

		transIndex = 0;
		out = null;
		image = null;
		pixels = null;
		indexedPixels = null;
		colorTab = null;
		closeStream = false;
		isImage = true;

		return ok;
	}
	
	
	public void setQuality(int quality) {
		if (quality < 1) quality = 1;
		sample = quality;
	}
	
	public void setImgSize(int w, int h) {
		if (started && !isImage) return;
		width = w;
		height = h;
		if (width < 1) width = 320;
		if (height < 1) height = 240;
		sizeSet = true;
	}
	
	public boolean FileHeader(OutputStream os) {
		if (os == null) return false;
		boolean ok = true;
		closeStream = false;
		out = os;
		try {
			writeString("GIF89a"); // header
		} catch (IOException e) {
			ok = false;
		}
		return started = ok;
	}
	
	public boolean FileHeader(File dir,String file) {
		boolean ok = true;
		try {
			out = new BufferedOutputStream(new FileOutputStream(new File(dir,file)));
			ok = FileHeader(out);
			closeStream = true;
		} catch (IOException e) {
			ok = false;
		}
		return started = ok;
	}
	
	protected void analyzePixels() {
		int len = pixels.length;
		int nPix = len / 3;
		indexedPixels = new byte[nPix];
		PixelQuant nq = new PixelQuant(pixels, len, sample);
		colorTab = nq.process(); // create reduced palette
		for (int i = 0; i < colorTab.length; i += 3) {
			byte temp = colorTab[i];
			colorTab[i] = colorTab[i + 2];
			colorTab[i + 2] = temp;
			usedEntry[i / 3] = false;
		}
		int k = 0;
		for (int i = 0; i < nPix; i++) {
			int index =
				nq.map(pixels[k++] & 0xff,
					   pixels[k++] & 0xff,
					   pixels[k++] & 0xff);
			usedEntry[index] = true;
			indexedPixels[i] = (byte) index;
		}
		pixels = null;
		colorDepth = 8;
		palSize = 7;
		if (transparent != null) {
			transIndex = findClosest(transparent);
		}
	}
	
	protected int findClosest(Color c) {
		if (colorTab == null) return -1;
		int r = c.getRed();
		int g = c.getGreen();
		int b = c.getBlue();
		int minpos = 0;
		int dmin = 256 * 256 * 256;
		int len = colorTab.length;
		for (int i = 0; i < len;) {
			int dr = r - (colorTab[i++] & 0xff);
			int dg = g - (colorTab[i++] & 0xff);
			int db = b - (colorTab[i] & 0xff);
			int d = dr * dr + dg * dg + db * db;
			int index = i / 3;
			if (usedEntry[index] && (d < dmin)) {
				dmin = d;
				minpos = index;
			}
			i++;
		}
		return minpos;
	}
	
	protected void getImagePixels() {
		int w = image.getWidth();
		int h = image.getHeight();
		int type = image.getType();
		if ((w != width)
			|| (h != height)
			|| (type != BufferedImage.TYPE_3BYTE_BGR)) {
			BufferedImage temp =
				new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
			Graphics2D g = temp.createGraphics();
			g.drawImage(image, 0, 0, null);
			image = temp;
		}
		pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
	}
	
	protected void writeGraphicCtrlExt() throws IOException {
		out.write(0x21); // extension introducer
		out.write(0xf9); // GCE label
		out.write(4); // data block size
		int transp, disp;
		if (transparent == null) {
			transp = 0;
			disp = 0; // dispose = no action
		} else {
			transp = 1;
			disp = 2; // force clear if using transparent color
		}
		if (dispose >= 0) {
			disp = dispose & 7; // user override
		}
		disp <<= 2;
		out.write(0 | disp | 0 | transp); 
		writeShort(0); // delay x 1/100 sec
		out.write(transIndex); // transparent color index
		out.write(0); // block terminator
	}
	
	/**
	 * Writes Image Descriptor
	 */
	protected void writeImageDesc() throws IOException {
		out.write(0x2c); // image separator
		writeShort(0); // image position x,y = 0,0
		writeShort(0);
		writeShort(width); // image size
		writeShort(height);
		// packed fields
		if (isImage) {
			out.write(0);
		} else {

			out.write(0x80 | 0 | 0 | 0 | palSize); 
		}
	}
	
	/**
	 * Writes Logical Screen Descriptor
	 */
	protected void writeLSD() throws IOException {
		// logical screen size
		writeShort(width);
		writeShort(height);
		// packed fields
		out.write((0x80 | // 1   : global color table flag = 1 (gct used)
				   0x70 | // 2-4 : color resolution = 7
				   0x00 | // 5   : gct sort flag = 0
			   palSize)); // 6-8 : gct size

		out.write(0); // background color index
		out.write(0); // pixel aspect ratio - assume 1:1
	}
	
	protected void writePalette() throws IOException {
		out.write(colorTab, 0, colorTab.length);
		int n = (3 * 256) - colorTab.length;
		for (int i = 0; i < n; i++) {
			out.write(0);
		}
	}
	
	protected void writePixels() throws IOException {
		LZWCompress encoder =
			new LZWCompress(width, height, indexedPixels, colorDepth);
		encoder.encode(out);
	}
	
	protected void writeShort(int value) throws IOException {
		out.write(value & 0xff);
		out.write((value >> 8) & 0xff);
	}
	
	protected void writeString(String s) throws IOException {
		for (int i = 0; i < s.length(); i++) {
			out.write((byte) s.charAt(i));
		}
	}
	
	public static void main(String args[]){
		new GIFCom();	
	}

	public void actionPerformed(ActionEvent e) {
		// TODO 自動生成方法存根
		if(e.getSource()==buttonCom){
			try{ 
				fc.setFileFilter(new   javax.swing.filechooser.FileFilter()   
				{   
					public   boolean   accept(File   f)   
					{   
						return   f.getName().toLowerCase().endsWith(".bmp");   
					}   
					public   String   getDescription()   
					{   
						return   "位圖文件 (*.BMP)";
					}   
				}   );
				
				fc.showDialog(this, "打開");
				File file=fc.getSelectedFile();
				filename=new String();
				try{
					filename=file.getName();
				}catch(NullPointerException ex){

				}
				if(file==null){
					return;
				}
				
				src = ImageIO.read(file); // 讀入文件 
				labelMes.setIcon(new ImageIcon(src));
				labelMes.setText(filename);
				
				
				}catch(IOException ex){ 
				ex.printStackTrace(); 
				} 
		}else{
			filesplit="";
			int ind=0;
			while(filename.charAt(ind)!='.'){
				filesplit+=filename.charAt(ind);
				ind++;
			}
			FileHeader(fc.getCurrentDirectory(),filesplit+".gif"); 
			toGIF(src); 
			FileTailer(); 
			labelMes.setIcon(new ImageIcon(src));
			labelMes.setText(filesplit+".gif");
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品视频你懂的| 9191精品国产综合久久久久久| 日韩高清不卡在线| 亚洲一区二区三区四区在线免费观看| 国产精品国产三级国产三级人妇| 欧美电影免费观看高清完整版| 欧美日韩亚洲国产综合| 欧美自拍偷拍午夜视频| 91麻豆.com| 欧美性受xxxx黑人xyx性爽| 99精品久久99久久久久| av不卡免费在线观看| 99久久久无码国产精品| 色婷婷久久一区二区三区麻豆| 91麻豆国产福利在线观看| 在线观看日韩国产| 欧美日韩精品一二三区| 欧美丰满美乳xxx高潮www| 91麻豆精品国产91久久久久| 欧美大片免费久久精品三p| 日韩欧美卡一卡二| 欧美国产97人人爽人人喊| 国产精品免费av| 亚洲精品视频观看| 日韩精品久久理论片| 国产一区二区在线观看视频| 国产成a人亚洲| 色偷偷成人一区二区三区91| 欧美日韩五月天| 久久久久久久久久电影| 国产精品国产三级国产| 亚洲h动漫在线| 国内精品在线播放| 一本久道久久综合中文字幕 | 欧美一级生活片| 精品国产乱码久久久久久夜甘婷婷 | 91视频在线看| 欧美日韩视频一区二区| 精品国产一区二区三区久久久蜜月| 国产日本欧洲亚洲| 亚洲福利一区二区三区| 国产在线播放一区三区四| 91天堂素人约啪| 日韩亚洲欧美成人一区| 亚洲欧洲韩国日本视频| 久久成人18免费观看| 色视频欧美一区二区三区| 亚洲精品一区二区三区精华液 | 日韩精品一区国产麻豆| 中文字幕在线免费不卡| 美腿丝袜在线亚洲一区| 91九色最新地址| 日本一区二区三区电影| 美女网站在线免费欧美精品| 99精品久久99久久久久| 国产亚洲欧美日韩俺去了| 亚洲一区视频在线| 成人av综合在线| 久久嫩草精品久久久精品| 性欧美大战久久久久久久久| 北岛玲一区二区三区四区| 精品av久久707| 日韩中文字幕不卡| 欧洲在线/亚洲| 136国产福利精品导航| 国产精品99久久久| 精品国产凹凸成av人网站| 亚洲高清一区二区三区| 欧美午夜精品久久久久久孕妇| 国产精品久久久久婷婷二区次| 国内外成人在线| www日韩大片| 精品一区二区三区香蕉蜜桃| 欧美绝品在线观看成人午夜影视| 亚洲丝袜精品丝袜在线| 国产精品1区2区3区在线观看| 日韩一级片网址| 国产主播一区二区三区| 欧美电视剧免费观看| 美女一区二区在线观看| 日韩精品一区二区在线观看| 毛片av一区二区三区| 日韩美女视频在线| 国模无码大尺度一区二区三区| 精品国产91乱码一区二区三区| 免费xxxx性欧美18vr| 欧美www视频| 国产精品小仙女| 国产精品电影一区二区三区| 成人免费视频网站在线观看| 国产精品二三区| 91在线国产观看| 艳妇臀荡乳欲伦亚洲一区| 精品1区2区3区| 美腿丝袜亚洲色图| 久久综合999| 99综合电影在线视频| 亚洲精品免费播放| 3atv在线一区二区三区| 狠狠色伊人亚洲综合成人| 久久精品综合网| av高清久久久| 午夜日韩在线电影| 精品国产一区二区三区四区四| 懂色av中文字幕一区二区三区| 国产精品卡一卡二| 欧美日韩卡一卡二| 国产盗摄一区二区| 亚洲一区二区精品久久av| 日韩视频免费观看高清在线视频| 国产成人在线免费观看| 亚洲综合自拍偷拍| 欧美一区二区免费视频| 波波电影院一区二区三区| 亚洲国产精品一区二区www| 精品久久久久久久久久久久包黑料| 成人黄色在线网站| 日韩精品电影在线| 中文字幕一区二| 日韩精品一区二区三区视频在线观看| 丰满白嫩尤物一区二区| 日本不卡一二三区黄网| 中文字幕一区二区三| 亚洲欧美日韩人成在线播放| 欧美日精品一区视频| 东方aⅴ免费观看久久av| 亚洲国产人成综合网站| 国产精品女同一区二区三区| 日韩一区二区免费在线电影| 波多野结衣亚洲一区| 精品在线一区二区三区| 亚洲一区二区高清| 国产精品视频第一区| 欧美一级xxx| 欧美人牲a欧美精品| 色综合中文字幕国产 | 色婷婷精品久久二区二区蜜臀av| 黑人精品欧美一区二区蜜桃| 亚洲国产cao| 一区二区三区在线视频免费观看| 久久久久久亚洲综合| 日韩一卡二卡三卡四卡| 欧美日韩一区二区在线观看视频 | 五月激情综合色| 《视频一区视频二区| 国产午夜精品一区二区三区视频| 欧美一区二区久久| 欧美日韩久久一区| 欧美三级电影网| 欧美色图第一页| 欧亚洲嫩模精品一区三区| 99国产精品国产精品久久| 粉嫩绯色av一区二区在线观看| 国产一区二区精品久久91| 国内精品写真在线观看| 久久黄色级2电影| 蜜桃一区二区三区在线观看| 日韩 欧美一区二区三区| 亚洲国产综合在线| 午夜精品久久久久影视| 亚洲成av人片一区二区| 日韩电影免费在线看| 日韩vs国产vs欧美| 蜜臀99久久精品久久久久久软件| 麻豆国产欧美日韩综合精品二区 | 国产丝袜美腿一区二区三区| 26uuuu精品一区二区| 国产亚洲欧美中文| 国产亚洲福利社区一区| 国产精品丝袜一区| 亚洲丝袜美腿综合| 性欧美疯狂xxxxbbbb| 免费观看在线综合| 国内外精品视频| 97精品久久久久中文字幕| 色偷偷一区二区三区| 91麻豆精品国产91久久久久| 2023国产一二三区日本精品2022| 久久九九久久九九| 成人欧美一区二区三区视频网页 | 久久精品亚洲乱码伦伦中文| 国产精品美女久久久久久久| 亚洲黄色尤物视频| 日韩av一区二区三区四区| 国产精品18久久久| 91视视频在线观看入口直接观看www| 欧美视频一区二区三区四区 | 91网站在线播放| 欧美二区三区的天堂| 欧美经典三级视频一区二区三区| 亚洲天堂2016| 激情六月婷婷综合| 日本乱码高清不卡字幕| 精品国产乱码久久久久久1区2区| 欧美国产精品劲爆| 天堂va蜜桃一区二区三区| 成人免费看的视频| 91精品国产品国语在线不卡| 国产精品色婷婷久久58| 午夜精品久久久久|