效果图如下:
package
org.test;

import
java.awt.Color;
import
java.awt.Frame;
import
java.awt.Graphics;
import
java.awt.Image;
import
java.awt.MediaTracker;
import
java.awt.Panel;
import
java.awt.image.BufferedImage;
import
java.awt.image.MemoryImageSource;
import
java.awt.image.PixelGrabber;

import
org.loon.framework.game.helper.ImageHelper;


/***/
/**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:Java图形程序水纹倒映效果
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/

public
class
ImageWave
extends
Panel
implements
Runnable
...
{


/***//**
*
*/
privatestaticfinallongserialVersionUID=1L;

privateThreadthread;

privateImage_image;

privateMediaTracker_mt;

privateint_delay;

privateGraphics_bg;

privateImage_screen;

privateboolean_playing;

privateint_pixels[];

privateint_mpixels[];

privateint_wpixels[];

privatefinalstaticint_WIDTH=480;

privatefinalstaticint_HEIGHT=604;

privateImage_images[];

privateint_sleep;

privateint_frame;


/***//**
*构造函数,注入背景图与延迟时间
*
*@paramimg
*@paramdelay
*/

publicImageWave(Imageimg,intdelay)...{
_delay=delay;

init(img,delay);

}


publicvoidinit(Imageimg,intdelay)...{
setBackground(Color.BLACK);
_image=img;
_mt=newMediaTracker(this);
_mt.addImage(_image,0);
_mt.checkAll(true);
_frame=10;
_screen=newBufferedImage(_WIDTH,_HEIGHT,1);
_bg=_screen.getGraphics();
thread=newThread(this);
thread.start();
}


publicvoidrun()...{
Thread.currentThread().setPriority(1);
longl=System.currentTimeMillis();
while(Thread.currentThread()==thread)

try...{
repaint();
_sleep++;
l+=_delay;
Thread.sleep(Math.max(0L,l-System.currentTimeMillis()));

}catch(InterruptedException_ex)...{
return;
}
}


/***//**
*绘制图象
*/

publicvoidpaint(Graphicsg)...{


if(!_playing)...{

if(_mt.checkAll())...{
_playing=true;
_bg.drawImage(_image,0,0,this);
_pixels=newint[(_WIDTH*_HEIGHT)/2];
_mpixels=newint[(_WIDTH*_HEIGHT)/2];
_wpixels=newint[((_WIDTH*_HEIGHT)/2)*_frame];
PixelGrabberpixelgrabber=newPixelGrabber(_image,0,0,
_WIDTH,_HEIGHT/2,_pixels,0,_WIDTH);

try...{
pixelgrabber.grabPixels();

}catch(InterruptedException_ex)...{
}
blure();
_images=newImage[_frame];
for(inti=0;i<_frame;i++)
_images[i]=createMirrorImage(i);

}

}else...{
if(_sleep>_frame-1)
_sleep=0;
_bg.drawImage(_images[_sleep],0,_HEIGHT/2,this);
}
g.drawImage(_screen,0,0,this);
}


publicvoidupdate(Graphicsg)...{
paint(g);
}


/***//**
*创建波纹反射图片
*
*@parami
*@return
*/

ImagecreateMirrorImage(inti)...{
intk1=_HEIGHT/2;
intj1=i*_WIDTH*k1;

for(intk=0;k<k1;k++)...{
intl=k*_WIDTH;
inti1=k1-k-1;
i1+=(int)((double)((k*5)/k1+2)*Math
.sin((25.132741228718345D*(double)i1*(double)i1)
/(double)k1/(double)k1
-(6.2831853071795862D*(double)i)
/(double)_frame));
if(i1<0)
i1=0;
if(i1>k1-1)
i1=k1-1;
i1*=_WIDTH;
for(intj=0;j<_WIDTH;j++)
_wpixels[j1+j+l]=_mpixels[j+i1];

}

Imageimage=createImage(newMemoryImageSource(_WIDTH,k1,_wpixels,
j1,_WIDTH));
returnimage;
}


/***//**
*模糊化反射图片
*
*/

voidblure()...{
intl=_HEIGHT/2;

for(intj=0;j<l;j++)...{
intk=j*_WIDTH;

for(inti=0;i<_WIDTH;i++)...{
inti1=_pixels[i+k];
intj1;
if(i!=_WIDTH-1)
j1=_pixels[i+k+1];
else
j1=_pixels[(i+k)-1];
intk1=0;
if(j!=l-1)
k1=_pixels[i+k+_WIDTH];
else
k1=_pixels[(i+k)-_WIDTH];
intl1=0;
if(j!=l-1&&i!=_WIDTH-1)
l1=_pixels[i+k+_WIDTH+1];
else
l1=_pixels[i+k];
inti2=(i1>>16&0xff)+(j1>>16&0xff)
+(k1>>16&0xff)+(l1>>16&0xff);
intj2=(i1>>8&0xff)+(j1>>8&0xff)+(k1>>8&0xff)
+(l1>>8&0xff);
intk2=(i1&0xff)+(j1&0xff)+(k1&0xff)+(l1&0xff);
i2>>=3;
j2=(j2>>3)+(j2>>4);
k2=(k2>>3)+(k2>>4);
_mpixels[i+k]=i1&0xff000000|i2<<16|j2<<8|k2;
}

}

}


publicstaticvoidmain(String[]args)...{
Framefrm=newFrame();
frm.setTitle("Java图形程序水纹倒映效果(由Loonframework提供)");
frm.setSize(_WIDTH,_HEIGHT+20);
frm.setResizable(false);
frm.add(newImageWave(ImageHelper.loadImage("C:/back.jpg",true),100));
frm.setVisible(true);
}

}





























































































































































































































































