Test.javaimport java.net.URL;import java.awt.Frame;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageProducer;public class Test extends Frame implements Runnable
{
Image tiger;
boolean showing = false;
Dissolver dissolver = null;
int x,y; public Test()
{
super("Image Dissolver"); MediaTracker mt = new MediaTracker(this);
URL url = getClass().getResource("Tiger.gif"); try
{
tiger = createImage((ImageProducer)url.getContent());
mt.addImage(tiger,0);
mt.waitForID(0);
}
catch(Exception e)
{
e.printStackTrace();
}
} public void addNotify()
{
super.addNotify(); Insets i = getInsets();
dissolver = new Dissolver(this,x = i.left,y = i.top,30,10); synchronized(dissolver)
{
ImageProducer ip = tiger.getSource();
ip.startProduction(dissolver);
try
{
dissolver.wait(); // wait for dissolved images ...
}
catch(Exception e) // wait() was interrupted
{
e.printStackTrace();
}
}
try
{
Thread thread = new Thread(this);
thread.start();
}
catch(Exception e) // thread was interrupted
{
e.printStackTrace();
}
} public void run()
{
while(true)
{
if(isShowing())
{
if(showing)
{
dissolver.fadeOut();
}
else
{
dissolver.fadeIn();
}
showing = showing ? false : true; try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
} public static void main(String args[])
{
final Test f = new Test();
f.setBounds(100,100,375,375);
f.setVisible(true); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
f.dispose();
System.exit(0);
}
});
}
}
import java.awt.Image;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageProducer;public class Test extends Frame implements Runnable
{
Image tiger;
boolean showing = false;
Dissolver dissolver = null;
int x,y; public Test()
{
super("Image Dissolver"); MediaTracker mt = new MediaTracker(this);
URL url = getClass().getResource("Tiger.gif"); try
{
tiger = createImage((ImageProducer)url.getContent());
mt.addImage(tiger,0);
mt.waitForID(0);
}
catch(Exception e)
{
e.printStackTrace();
}
} public void addNotify()
{
super.addNotify(); Insets i = getInsets();
dissolver = new Dissolver(this,x = i.left,y = i.top,30,10); synchronized(dissolver)
{
ImageProducer ip = tiger.getSource();
ip.startProduction(dissolver);
try
{
dissolver.wait(); // wait for dissolved images ...
}
catch(Exception e) // wait() was interrupted
{
e.printStackTrace();
}
}
try
{
Thread thread = new Thread(this);
thread.start();
}
catch(Exception e) // thread was interrupted
{
e.printStackTrace();
}
} public void run()
{
while(true)
{
if(isShowing())
{
if(showing)
{
dissolver.fadeOut();
}
else
{
dissolver.fadeIn();
}
showing = showing ? false : true; try
{
Thread.currentThread().sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
} public static void main(String args[])
{
final Test f = new Test();
f.setBounds(100,100,375,375);
f.setVisible(true); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
f.dispose();
System.exit(0);
}
});
}
}
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.ColorModel;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageConsumer;
import java.awt.image.MemoryImageSource;class Dissolver implements ImageConsumer
{
Image images[];
Image image,offscreen;
ColorModel defaultRGB = ColorModel.getRGBdefault();
Component component;
Graphics g,offg;
int intPixels[],x,y,width,height,pauseInterval;
int numImages; public Dissolver(Component c,int x,int y)
{
this(c,x,y,10,50);
} public Dissolver(Component c,int x,int y,int numImages,int pauseInterval)
{
this.component = c;
this.numImages = numImages;
this.pauseInterval = pauseInterval;
this.x = x;
this.y = y; images = new Image[numImages];
} public void setColorModel(ColorModel model)
{
// don't care - we use our own in imageComplete(),
// and the one passed into setPixels()
} public void setHints(int hints)
{
// don't care
} public void setProperties(java.util.Hashtable props)
{
// don't care
} public void setDimensions(int width,int height)
{
this.width = width;
this.height = height;
intPixels = new int[width * height];
} public void setPixels(int x,int y,int w,int h,ColorModel model,int[] pixels,int offset,int scansize)
{
for(int r = 0;r < h;++r)
{
for(int c = 0;c < w;++c)
{
int index = offset + r * scansize + c;
intPixels[index] = model.getRGB(pixels[index] & 0xff);
}
}
} public void setPixels(int x,int y,int w,int h,ColorModel model,byte[] pixels,int offset,int scansize)
{
for(int r = 0;r < h;++r)
{
for(int c = 0;c < w;++c)
{
int index = offset + r * scansize + c;
intPixels[index] = model.getRGB(pixels[index] & 0xff);
}
}
} public synchronized void imageComplete(int status)
{
if(status == IMAGEERROR || status == IMAGEABORTED)
{
return;
}
MemoryImageSource mis = new MemoryImageSource(width,height,defaultRGB,intPixels,0,width);
image = component.createImage(mis); makeDissolvedImages(); // this takes some time, so ...
notifyAll(); // notify all threads waiting on us
} private void makeDissolvedImages()
{
MediaTracker mt = new MediaTracker(component);
DissolveFilter filter; for(int i = 0;i < images.length;++i)
{
filter = new DissolveFilter((255 / (numImages - 1)) * i); FilteredImageSource fis = new FilteredImageSource(image.getSource(),filter);
images[i] = component.createImage(fis);
mt.addImage(images[i],i);
}
mt.addImage(image,numImages);
try
{
mt.waitForAll();
}
catch(Exception e)
{
e.printStackTrace();
}
} public void fadeOut()
{
if(offscreen == null)
{
offscreen = component.createImage(width,height);
}
offg = offscreen.getGraphics();
g = component.getGraphics(); if(offg != null && g != null)
{
try
{
for(int i = numImages - 1;i >= 0;--i)
{
clearOffscreen();
blitImage(images[i]);
pause();
}
}
finally
{
offg.dispose();
g.dispose();
}
}
} public void fadeIn()
{
if(offscreen == null)
{
offscreen = component.createImage(width,height);
}
offg = offscreen.getGraphics();
g = component.getGraphics(); if(offg != null && g != null)
{
try
{
for(int i = 0;i < numImages;++i)
{
clearOffscreen();
blitImage(images[i]);
pause();
}
blitImage(image);
}
finally
{
offg.dispose();
g.dispose();
}
}
} private void blitImage(Image im)
{
offg.drawImage(im,0,0,component);
g.drawImage(offscreen,x,y,component);
} private void clearOffscreen()
{
offg.setColor(component.getBackground());
offg.fillRect(0,0,width,height);
} private void pause()
{
try
{
Thread.currentThread().sleep(pauseInterval);
}
catch(InterruptedException e)
{
}
}
}
import java.awt.image.ImageFilter;class DissolveFilter extends ImageFilter
{
ColorModel defaultRGB = ColorModel.getRGBdefault();
int sineArray[],pixelRow[],alpha,width,height; public DissolveFilter()
{
this(100);
} public DissolveFilter(int alpha)
{
if(alpha < 0 || alpha > 255)
{
throw new IllegalArgumentException("bad alpha argument");
} this.alpha = alpha;
} public void setDimensions(int width,int height)
{
int x;
this.width = width;
this.height = height;
pixelRow = new int[width];
consumer.setDimensions(width,height);
} public void setColorModel(ColorModel model)
{
consumer.setColorModel(defaultRGB);
} public void setPixels(int x,int y,int w,int h,ColorModel cm,int pixels[],int offset,int scansize)
{
int pixel,index,originalAlpha; for(int row = 0;row < h;row++)
{
for(int col = 0;col < w;col++)
{
index = offset + row * scansize + col;
pixel = cm.getRGB(pixels[index]);
originalAlpha = defaultRGB.getAlpha(pixel); pixel = originalAlpha == 0 ? 0 : alpha << 24 |
defaultRGB.getRed(pixel) << 16 |
defaultRGB.getGreen(pixel) << 8 |
defaultRGB.getBlue(pixel); pixelRow[col] = pixel;
}
consumer.setPixels(x,y + row,w,1,defaultRGB,pixelRow,0,w);
}
} public void setPixels(int x,int y,int w,int h,ColorModel cm,byte pixels[],int offset,int scansize)
{
int pixel,index,originalAlpha; for(int row = 0;row < h;row++)
{
for(int col = 0;col < w;col++)
{
index = offset + row * scansize + col;
pixel = cm.getRGB(pixels[index] & 0xff); originalAlpha = defaultRGB.getAlpha(pixel); pixel = originalAlpha == 0 ? 0 : alpha << 24 |
defaultRGB.getRed(pixel) << 16 |
defaultRGB.getGreen(pixel) << 8 |
defaultRGB.getBlue(pixel); pixelRow[col] = pixel;
}
consumer.setPixels(x,y + row,w,1,defaultRGB,pixelRow,0,w);
}
}
}
change to:
Test.class.getResource("Tiger.gif");