2010-10-15 83 views

回答

16

如果您熟悉Java的util.List,則Image和BufferedImage之間的區別與List和LinkedList之間的區別相同。

圖像是一個通用的概念,BufferedImage是通用概念的具體實現;有點像寶馬是一輛汽車的製造。

13

圖像是一個抽象類。你不能直接實例化Image。 BufferedImage是一個後代,你可以實例化一個。所以,如果你理解抽象類和繼承,你就會明白什麼時候使用它們。

例如,如果您使用多個Image後代,他們將共享一些通用屬性,這些屬性是從Image繼承的。

如果你想寫會採取任何一種的後代作爲參數,你可以做一些這樣的功能:

function myFunction(Image myImage) { 
    int i = myImage.getHeight(); 
    ... 
} 

然後,您可以通過它傳遞一個BufferedImage或VolatileImage中調用該函數。

BufferedImage myBufferedImage; 
VolatileImage myVolatileImage; 
... 
myFunction(myVolatileImage); 
myFunction(myBufferedImage); 

您將不會將圖像轉換爲BufferedImage,因爲您永遠不會有圖像。

7

ImageBufferedImage有什麼區別?

正如在Oracle的Java教程用於與圖像

  • 的java.awt.Image中類工作指出的是,表示圖形圖像的像素的矩形陣列的超類。
  • java.awt.image.BufferedImage類,它擴展了Image類以允許應用程序直接對圖像數據進行操作(例如,檢索或設置像素顏色)。應用程序可以直接構造這個類的實例。

BufferedImage類是Java 2D即時模式映像API的基石。它管理內存中的圖像,並提供存儲,解釋和獲取像素數據的方法。由於BufferedImage是Image的子類,因此可以通過接受Image參數的Graphics和Graphics2D方法來渲染。

BufferedImage本質上是一個具有可訪問數據緩衝區的圖像。因此,直接使用BufferedImage會更高效。 BufferedImage有一個ColorModel和一個圖像數據的柵格。 ColorModel提供圖像像素數據的顏色解釋。


我可以創建直接從圖像信號源 「image.png」 一個BufferedImage

肯定。

BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image")); 
相關問題