📄 ripple.java
字号:
import java.applet.Applet;
import java.awt.*;
import java.awt.image.ImageObserver;
import java.io.PrintStream;
public class ripple extends Applet
implements Runnable
{
Image origImg = null;
Image backImg = null;
Image finImg = null;
int w1 = 0;
int h1 = 0;
Graphics backG = null;
Graphics finG = null;
int phase = 0;
Thread nick = null;
int frameNo = 0;
int frames = 0;
int period = 0;
boolean stopIt = false;
boolean borderGap = false;
boolean imLoaded = false;
public void init()
{
setBackground(Color.white);
origImg=getImage(getDocumentBase(),getParameter("image"));
w1 = origImg.getWidth(this);
h1 = origImg.getHeight(this);
if(h1 > 0 && w1 > 0)
stopIt = false;
period = Integer.parseInt(getParameter("period"));
frames = Integer.parseInt(getParameter("frames"));
}
public void start()
{
if(nick == null)
{
nick = new Thread(this);
nick.start();
}
}
public void stop()
{
if(nick != null)
{
nick.stop();
nick = null;
}
}
public void rotateImage(Graphics g)
{
shearX(g);
shearY(g);
}
public void shearX(Graphics g)
{
for(int i = 0; i < h1; i++)
{
double d = (double)(period >> 1) * Math.sin((double)i / (double)period + (6.2831853071795862D * (double)phase) / (double)frames);
g.copyArea(0, i, w1, 1, (int)d, 0);
}
}
public void shearY(Graphics g)
{
for(int i = 0; i < w1; i++)
{
double d = (double)(period >> 1) * Math.sin((double)i / (double)period + (6.2831853071795862D * (double)phase) / (double)frames);
g.copyArea(i, 0, 1, h1, 0, (int)d);
}
}
public void run()
{
while(nick != null)
{
try
{
Thread.sleep(50L);
}
catch(InterruptedException _ex) { }
frameNo = (frameNo + 1) % frames;
repaint();
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
if(!stopIt)
{
stopIt = true;
createIt();
}
if(finImg != null)
{
g.drawImage(finImg, 0, -frameNo * h1, this);
g.drawImage(finImg, 0, (frames - frameNo) * h1, this);
return;
}
else
{
g.drawImage(origImg, 0, 0, this);
return;
}
}
public void createIt()
{
backImg = createImage(w1, h1);
backG = backImg.getGraphics();
finImg = createImage(w1, frames * h1);
finG = finImg.getGraphics();
backG.setColor(Color.white);
for(phase = 0; phase < frames; phase++)
{
backG.drawImage(origImg, 0, 0, this);
rotateImage(backG);
finG.drawImage(backImg, 0, phase * h1, this);
}
}
public ripple()
{
frames = 12;
period = 50;
stopIt = true;
imLoaded = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -