2011-07-19 78 views
0

有一個10MB的Jpeg圖像我正在嘗試閱讀使用下面的代碼,但我得到一個「線程中的異常」主「java.lang.OutOfMemoryError:Java堆空間」 。我想知道一張10MB的圖片是否太大而無法讀取,如果是的話,我應該增加堆空間。Java閱讀圖像 - java.lang.OutOfMemoryError

增加堆空間應該是最後的選擇,所以我想知道是否有其他方法可以實現這一點。我的代碼附在下面;

BufferedImage image; 
    try { 

     image = ImageIO.read(new File("C:/Users/Administrator/Desktop/aa.jpg")); 

      printDetails(image); 

     } catch (IOException e) { 

     } 

幫助讚賞。

回答

4

請注意,10MB JPEG可以輕鬆解壓縮到更多兆字節的未壓縮圖像數據。

假設您使用的是標準的24位色彩空間(每個RGB爲8位),圖像的尺寸爲10000×10000像素(如果輸入大小爲10MB,這並不太不現實),那麼您需要超過286MB的存儲空間來存儲原始未壓縮的圖像數據(假設沒有任何開銷)。

這比Oracle客戶端虛擬機的默認最大堆大小要大得多,因此您可能需要使用the -Xmx argument來增加可用堆內存。

+0

我會補充說,增加堆不一定是最後的選擇。如果您只是使用默認的JVM堆設置運行,那非常小。幾乎所有「真正的」Java程序都要求內存設置大於默認設置。 – g051051