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

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

?? imageencoder.java

?? 使用servlet開發的動態生成GIF圖像
?? JAVA
字號:
// ImageEncoder - abstract class for writing out an image
//
// Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>.  All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
// Visit the ACME Labs Java page for up-to-date versions of this and other
// fine Java utilities: http://www.acme.com/java/

package Acme.JPM.Encoders;

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

/// Abstract class for writing out an image.
// <P>
// A framework for classes that encode and write out an image in
// a particular file format.
// <P>
// This provides a simplified rendition of the ImageConsumer interface.
// It always delivers the pixels as ints in the RGBdefault color model.
// It always provides them in top-down left-right order.
// If you want more flexibility you can always implement ImageConsumer
// directly.
// <P>
// <A HREF="/resources/classes/Acme/JPM/Encoders/ImageEncoder.java">Fetch the software.</A><BR>
// <A HREF="/resources/classes/Acme.tar.gz">Fetch the entire Acme package.</A>
// <P>
// @see GifEncoder
// @see PpmEncoder
// @see Acme.JPM.Decoders.ImageDecoder

public abstract class ImageEncoder implements ImageConsumer
    {

    protected OutputStream out;

    private ImageProducer producer;
    private int width = -1;
    private int height = -1;
    private int hintflags = 0;
    private boolean started = false;
    private boolean encoding;
    private IOException iox;
    private static final ColorModel rgbModel = ColorModel.getRGBdefault();
    private Hashtable props = null;

    /// Constructor.
    // @param img The image to encode.
    // @param out The stream to write the bytes to.
    public ImageEncoder( Image img, OutputStream out ) throws IOException
	{
	this( img.getSource(), out );
	}

    /// Constructor.
    // @param producer The ImageProducer to encode.
    // @param out The stream to write the bytes to.
    public ImageEncoder( ImageProducer producer, OutputStream out ) throws IOException
	{
	this.producer = producer;
	this.out = out;
	}


    // Methods that subclasses implement.

    /// Subclasses implement this to initialize an encoding.
    abstract void encodeStart( int w, int h ) throws IOException;

    /// Subclasses implement this to actually write out some bits.  They
    // are guaranteed to be delivered in top-down-left-right order.
    // One int per pixel, index is row * scansize + off + col,
    // RGBdefault (AARRGGBB) color model.
    abstract void encodePixels(
	int x, int y, int w, int h, int[] rgbPixels, int off, int scansize )
	throws IOException;

    /// Subclasses implement this to finish an encoding.
    abstract void encodeDone() throws IOException;


    // Our own methods.

    /// Call this after initialization to get things going.
    public synchronized void encode() throws IOException
	{
	encoding = true;
	iox = null;
	producer.startProduction( this );
	while ( encoding )
	    try
		{
		wait();
		}
	    catch ( InterruptedException e ) {}
	if ( iox != null )
	    throw iox;
	}

    private boolean accumulate = false;
    private int[] accumulator;

    private void encodePixelsWrapper(
	int x, int y, int w, int h, int[] rgbPixels, int off, int scansize )
	throws IOException
	{
	if ( ! started )
	    {
	    started = true;
	    encodeStart( width, height );
	    if ( ( hintflags & TOPDOWNLEFTRIGHT ) == 0 )
		{
		accumulate = true;
		accumulator = new int[width * height];
		}
	    }
	if ( accumulate )
	    for ( int row = 0; row < h; ++row )
		System.arraycopy(
		    rgbPixels, row * scansize + off,
		    accumulator, ( y + row ) * width + x,
		    w );
	else
	    encodePixels( x, y, w, h, rgbPixels, off, scansize );
	}

    private void encodeFinish() throws IOException
	{
	if ( accumulate )
	    {
	    encodePixels( 0, 0, width, height, accumulator, 0, width );
	    accumulator = null;
	    accumulate = false;
	    }
	}

    private synchronized void stop()
	{
	encoding = false;
	notifyAll();
	}


    // Methods from ImageConsumer.

    public void setDimensions( int width, int height )
	{
	this.width = width;
	this.height = height;
	}

    public void setProperties( Hashtable props )
	{
	this.props = props;
	}

    public void setColorModel( ColorModel model )
	{
	// Ignore.
	}

    public void setHints( int hintflags )
	{
	this.hintflags = hintflags;
	}

    public void setPixels(
	int x, int y, int w, int h, ColorModel model, byte[] pixels,
	int off, int scansize )
	{
	int[] rgbPixels = new int[w];
	for ( int row = 0; row < h; ++row )
	    {
	    int rowOff = off + row * scansize;
	    for ( int col = 0; col < w; ++col )
		rgbPixels[col] = model.getRGB( pixels[rowOff + col] & 0xff );
	    try
		{
		encodePixelsWrapper( x, y + row, w, 1, rgbPixels, 0, w );
		}
	    catch ( IOException e )
		{
		iox = e;
		stop();
		return;
		}
	    }
	}

    public void setPixels(
	int x, int y, int w, int h, ColorModel model, int[] pixels,
	int off, int scansize )
	{
	if ( model == rgbModel )
	    {
	    try
		{
		encodePixelsWrapper( x, y, w, h, pixels, off, scansize );
		}
	    catch ( IOException e )
		{
		iox = e;
		stop();
		return;
		}
	    }
	else
	    {
	    int[] rgbPixels = new int[w];
            for ( int row = 0; row < h; ++row )
		{
		int rowOff = off + row * scansize;
                for ( int col = 0; col < w; ++col )
                    rgbPixels[col] = model.getRGB( pixels[rowOff + col] );
		try
		    {
		    encodePixelsWrapper( x, y + row, w, 1, rgbPixels, 0, w );
		    }
		catch ( IOException e )
		    {
		    iox = e;
		    stop();
		    return;
		    }
		}
	    }
	}

    public void imageComplete( int status )
	{
	producer.removeConsumer( this );
	if ( status == ImageConsumer.IMAGEABORTED )
	    iox = new IOException( "image aborted" );
	else
	    {
	    try
		{
		encodeFinish();
		encodeDone();
		}
	    catch ( IOException e )
		{
		iox = e;
		}
	    }
	stop();
	}

    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文一区二区在线观看| 精品国产电影一区二区| 国产精品99久久久久久似苏梦涵| 亚洲一区二区在线视频| 亚洲免费高清视频在线| 国产精品久久久久久久裸模| 国产蜜臀97一区二区三区 | 亚洲人成网站色在线观看| 国产精品久久久久久久久动漫| 久久久久久久久久久久电影| 久久综合九色综合久久久精品综合| 91精品国产综合久久精品麻豆| 欧美日韩一区二区三区免费看| 91国产丝袜在线播放| 色综合久久久久综合体| 欧美在线你懂的| 在线不卡一区二区| 精品久久久久久久久久久久久久久 | 精品精品国产高清a毛片牛牛 | 免费观看一级特黄欧美大片| 久久国内精品视频| 国产精品自拍av| 99久久久免费精品国产一区二区| 91美女视频网站| 欧美在线色视频| 欧美大片顶级少妇| 国产精品国产a| 亚洲成人一区在线| 国产老妇另类xxxxx| 成人a区在线观看| 在线免费精品视频| 欧美tickling挠脚心丨vk| 中文字幕久久午夜不卡| 亚洲一区二区三区四区五区中文| 日韩国产精品久久| 国产99久久久国产精品潘金网站| 91浏览器打开| 精品少妇一区二区三区在线播放 | 欧美日韩免费一区二区三区视频| 日韩一级黄色片| 综合自拍亚洲综合图不卡区| 奇米一区二区三区av| 99精品偷自拍| 久久久久亚洲综合| 日韩中文字幕亚洲一区二区va在线| 久久超碰97中文字幕| av资源网一区| 精品日韩在线观看| 亚洲午夜久久久久久久久电影院| 激情伊人五月天久久综合| 在线亚洲人成电影网站色www| 精品国免费一区二区三区| 亚洲综合色区另类av| 韩国午夜理伦三级不卡影院| 一本到三区不卡视频| 6080午夜不卡| 一区二区三区小说| 美日韩一区二区三区| 大美女一区二区三区| 99久久久久免费精品国产 | 99久久99久久久精品齐齐| 欧美艳星brazzers| 国产欧美精品区一区二区三区| 亚洲免费在线观看视频| 国产一区二区三区在线观看免费视频 | 久久综合久久久久88| 亚洲免费在线视频一区 二区| 免费观看久久久4p| 欧洲精品一区二区三区在线观看| 欧美精品一区二区久久婷婷| 国产精品天美传媒沈樵| 精品在线观看视频| 欧美日韩一区三区四区| 国产日韩av一区二区| 日本不卡不码高清免费观看| 色综合一区二区| 欧美激情在线一区二区| 天天av天天翘天天综合网| 北条麻妃国产九九精品视频| 久久久影视传媒| 久久成人久久鬼色| 日韩一区二区三区在线| 亚洲一区二区黄色| 日本精品视频一区二区三区| 国产精品久久久久久久久果冻传媒| 久久97超碰色| 日韩欧美国产小视频| 另类人妖一区二区av| 91精品在线观看入口| 亚洲综合久久久久| 91美女视频网站| 国产精品成人一区二区三区夜夜夜| 国产一区二区三区| 精品国产伦一区二区三区免费| 婷婷中文字幕一区三区| 欧美日韩综合在线免费观看| 亚洲国产视频一区二区| 欧美日韩极品在线观看一区| 亚洲成人免费在线观看| 欧美性生交片4| 亚洲一区二区三区爽爽爽爽爽| 91视频在线观看免费| 亚洲女人的天堂| 在线亚洲高清视频| 天天色综合天天| 欧美一区二区三区白人| 国产精品进线69影院| 成人av免费在线| 中文字幕日韩一区| 在线看不卡av| 天天操天天综合网| 久久尤物电影视频在线观看| 韩国精品免费视频| 亚洲欧洲成人精品av97| 欧洲精品在线观看| 亚洲国产精品麻豆| 日韩三级电影网址| 国产69精品一区二区亚洲孕妇 | 日韩激情视频网站| 欧美一区二区精品| 99久久精品免费看| 亚洲综合男人的天堂| 欧美一区二区视频在线观看2020| 青草国产精品久久久久久| 久久精品网站免费观看| 欧美在线一区二区| 国产一区欧美日韩| 亚洲一卡二卡三卡四卡| 国产亚洲精品免费| 欧美午夜精品一区二区三区| 免费观看日韩av| 亚洲精品精品亚洲| 日韩女优av电影在线观看| 91在线视频在线| 日韩**一区毛片| 国产精品色哟哟| 91精品国产综合久久久蜜臀粉嫩 | 欧美一区二区久久久| 99国产一区二区三精品乱码| 亚洲欧美另类图片小说| 中文文精品字幕一区二区| 欧美猛男男办公室激情| 成人动漫一区二区| 日本网站在线观看一区二区三区 | 亚洲综合激情小说| 国产亚洲美州欧州综合国| 色综合久久久久综合体| 972aa.com艺术欧美| 国产一区二区福利视频| 午夜精品免费在线| 中文字幕免费一区| 精品不卡在线视频| 欧美欧美欧美欧美| 91官网在线免费观看| 国产一区二区三区久久久| 午夜成人免费电影| 亚洲午夜视频在线观看| 中文字幕一区不卡| 欧美另类高清zo欧美| 在线观看亚洲精品| 99久久er热在这里只有精品15 | 午夜成人免费电影| 亚洲永久精品大片| 国产精品久久久久久久久动漫| 欧美成人a在线| 91精品国产黑色紧身裤美女| 99久久婷婷国产综合精品电影| 99视频有精品| av不卡免费在线观看| 国产麻豆午夜三级精品| 国产尤物一区二区| 国产精品一二三| 国产成人午夜片在线观看高清观看| 首页国产欧美日韩丝袜| 日韩中文字幕不卡| 美国十次了思思久久精品导航| 午夜电影网一区| 免费高清在线视频一区·| 丝袜美腿亚洲一区| 美腿丝袜在线亚洲一区| 久久精品国产久精国产| 日韩高清欧美激情| 粉嫩嫩av羞羞动漫久久久 | 国产偷国产偷精品高清尤物| 欧美成人艳星乳罩| 久久午夜免费电影| 国产婷婷一区二区| 国产精品美女一区二区三区| 日韩美女视频在线| 国产精品久久网站| 亚洲一二三区不卡| 日本vs亚洲vs韩国一区三区 | 色一区在线观看| 欧美人与禽zozo性伦| 精品福利二区三区| 中文字幕一区在线| 亚洲国产日韩综合久久精品| 日韩高清电影一区| 99免费精品在线| 欧美在线高清视频|