2012-09-26 11 views
0

我測試使用兩種方法在我的應用程序中加載超過2米大小的圖片。有關在Java中加載圖片的函數的速度

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() .Could有人能解釋我爲什麼?等待你的回覆。

回答

1

我會說兩個功能以兩種不同的方式工作。

ImageIO是保證回報您可以立即畫的圖像,其中作爲getImage將參考返回到其可能在未來一段時間內加載的可能的圖像,因此原因,你看需要塗料的方法ImageObserver

這可以解釋BufferedImageImage之間的許多區別。 BufferedImage允許你直接訪問像像素和顏色模型數據的東西

+0

謝謝你的答覆。我可以理解你的答案最多。但是「因此繪畫方法需要ImageObserver」的意思是什麼? – user1456170

+0

看看像Graphics2D.drawImage。最後一個參數是一個ImageObserver(它很幸運地被大多數UI組件所實現)。當圖像數據可用於繪製時,這用於告訴圖形引擎。你必須記住,最初的前提是Imges將被加載網絡(慢調制解調器),所以他們需要跟蹤進度,以免減慢繪製週期。 ImageIO是在JDK 1.4中引入的,旨在提供更「直接」的加載機制 – MadProgrammer

+0

因此,如果加載大圖像數據,ImageIO是否比其他更好? – user1456170