我测试使用两种方法在我的应用程序中加载超过2米大小的图片。
private void loadImages() {
long currentTime=System.currentTimeMillis();
MediaTracker mediaTracker = new MediaTracker(this);
images = new HashMap<String, Image>();
for (Iterator iterator = model.getAllImages().iterator(); iterator
.hasNext(); mediaTracker.addImage(tempImage, 0)) {
String filename = (String) iterator.next();
try{
tempImage=ImageIO.read(Game.class.getResourceAsStream(filename));
}catch(Exception e){
}
//URL imageURL = getClass().getResource(filename);
// tempImage = getImage(getCodeBase(), imageURL.toString());
images.put(filename, tempImage);
}
try {
mediaTracker.waitForID(0);
} catch (InterruptedException interruptedexception) {
}
System.err.println(System.currentTimeMillis()-currentTime);
}
我的测试结果显示ImageIO.read()
比getImage()
慢两倍。有人可以解释一下原因吗?等你回复。
答案 0 :(得分:1)
我想说两个函数以两种不同的方式工作。
ImageIO
保证会返回一个可以立即绘制的图像,其中getImage
会返回对可能在未来某个时间加载的图像的引用,因此你看到需要ImageObserver
这可以解释BufferedImage
和Image
之间的差异。 BufferedImage
允许您直接访问像素和颜色模型数据