Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中加载图片功能的速度_Java - Fatal编程技术网

java中加载图片功能的速度

java中加载图片功能的速度,java,Java,我使用两种方法在我的应用程序中加载超过2m大小的图片 private void loadImages() { long currentTime=System.currentTimeMillis(); MediaTracker mediaTracker = new MediaTracker(this); images = new HashMap<String, Image>(); for (Iterator iterato

我使用两种方法在我的应用程序中加载超过2m大小的图片

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);
    }
private void loadImages(){
长currentTime=System.currentTimeMillis();
MediaTracker MediaTracker=新的MediaTracker(此);
images=newhashmap();
for(迭代器迭代器=model.getAllImages().Iterator();迭代器
.hasNext();mediaTracker.addImage(tempImage,0)){
字符串文件名=(字符串)迭代器.next();
试一试{
tempImage=ImageIO.read(Game.class.getResourceAsStream(文件名));
}捕获(例外e){
}
//URL imageURL=getClass().getResource(文件名);
//tempImage=getImage(getCodeBase(),imageURL.toString());
image.put(文件名,tempImage);
}
试一试{
mediaTracker.waitForID(0);
}捕获(中断异常中断异常){
}
System.err.println(System.currentTimeMillis()-currentTime);
}

我的测试结果显示,
ImageIO.read()
getImage()
慢两倍。有人能解释一下原因吗?等待您的回复。

我想说,这两个函数以两种不同的方式工作

ImageIO
保证返回可以立即绘制的图像,其中as
getImage
将返回对可能在将来某个时间加载的图像的引用,因此您会看到需要
ImageObserver
的绘制方法


这将解释
buffereImage
Image
之间的大部分差异
BuffereImage
允许您直接访问像素和颜色模型数据等内容

谢谢您的回复。我能理解您的大部分答案。但是“因此绘制方法需要ImageObserver”是什么意思?请看Graphics2D.drawImage之类的内容。最后一个参数是ImageObserver(幸运的是大多数UI组件都实现了它)。这用于告知图形引擎何时可以绘制图像数据。您必须记住,最初的前提是Imges将从网络上加载(使用慢速调制解调器),因此他们需要离开以跟踪进度,以免减慢绘制周期。ImageIO是在JDK1.4中引入的,目的是提供一种更“直接”的加载机制。因此,如果加载大映像数据,ImageIO是否比其他的好?@user1456:如果加载大映像,则需要在EDT的一个线程上执行此操作,即Swing事件线程。1+到Mad。@user1456170这取决于您希望图像何时可用。如果您必须立即绘制图像,我会使用ImageIO(就个人而言,我会一直使用ImageIO),或者您希望访问图像数据。