【Java开源代码栏目提醒】:网学会员--在 Java开源代码编辑为广大网友搜集整理了:VolatileImageTest.java绩等信息,祝愿广大网友取得需要的信息,参考学习。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
public class VolatileImageTest extends Applet implements ItemListener
{
// 动画线程
private Thread animation;
// 屏外绘制图像
private Image offscreen;
// 平铺图像
private Image tile;
// 平铺图像的宽和高
private int tileWidth;
private int tileHeight;
// 允许用户在屏外绘制加速和不加速中做出选择
private Checkbox accelerated;
public void init()
{
// 创建平铺图像
tile = getImage(getDocumentBase(), "bevel.gif");
while(tile.getWidth(this) <= 0);
tileWidth = tile.getWidth(this);
tileHeight = tile.getHeight(this);
// 创建单选按钮
setLayout(new BorderLayout());
accelerated = new Checkbox("use accelerated image", null, true);
accelerated.addItemListener(this);
Panel p = new Panel();
p.add(accelerated);
add(p, BorderLayout.SOUTH);
// 创建屏外绘制图像
createOffscreenImage(accelerated.getState());
} // init
// 根据传入的参数创建VolatileImage或者BufferedImage
private void createOffscreenImage(boolean createAccelerated)
{
if(createAccelerated)
{
// 创建加速图像
offscreen =
getGraphicsConfiguration().createCompatibleVolatileImage(getSize().width, getSize().height);
}
else
{
// 否则,只是创建一个老式的BufferedImage
offscreen =
getGraphicsConfiguration().createCompatibleImage(getSize().width, getSize().height);
}
}
public void update(Graphics g)
{
// 计算1000绘制画面所耗费的时间
long time = System.currentTimeMillis();
for(int i = 0; i < 1000; i++)
{
paint(g);
}
if(offscreen instanceof VolatileImage)
{
System.out.println("It took " + (System.currentTimeMillis() - time) + " ms to render " +
" the scene 1000 times using an accelerated image.");
}
else
{
System.out.println("It took " + (System.currentTimeMillis() - time) + " ms to render " +
"the scene 1000 times using an non-accelerated image.");
}
}
public void paint(Graphics g)
{
// 校验屏外图像并绘制画面
if(offscreen instanceof VolatileImage)
{
VolatileImage volatileImage = (VolatileImage) offscreen;
do
{
// 如果屏外图像无效的话则重置它
if(volatileImage.validate(getGraphicsConfiguration()) == VolatileImage.IMAGE_INCOMPATIBLE)
{
createOffscreenImage(true);
}
// 绘制画面
paintScene(volatileImage.getGraphics());
// 如果内容丢失则循环
} while(volatileImage.contentsLost());
}
else
{
if(offscreen == null ||
offscreen.getWidth(null) != getSize().width ||
offscreen.getHeight(null) != getSize().height
)
{
createOffscreenImage(false);
}
paintScene(offscreen.getGraphics());
}
// 在applet窗体上绘制屏外图像
g.drawImage(offscreen, 0, 0, this);
} // paint
private void paintScene(Graphics g)
{
// 在applet窗体内平铺图像
Graphics2D g2d = (Graphics2D) g;
int width = getSize().width;
int height = getSize().height;
for(int y = 0; y < height; y += tileHeight)
{
for(int x = 0; x < width; x += tileWidth)
{
g2d.drawImage(tile, x, y, this);
}
}
// 破弃Graphics对象可能使用的资源
g2d.dispose();
}
public void itemStateChanged(ItemEvent e)
{
if(accelerated == e.getSource())
{
createOffscreenImage(accelerated.getState());
repaint();
}
}
} // VolatileImageTest