2011-11-21 130 views
1

我有一個自定義類vtools.Image,它擴展了BufferedImage。java對象轉換

然後,我正在使用ImageIO.read從一個URL中讀取圖片,並將其作爲BufferedImage調整。

BufferedImage bfImg = ImageIO.read(imageUrl); 

但我需要這個bfImg轉換成vtools.Image但是當我嘗試投它我得到一個ClassCastException錯誤。轉換這兩種方式的另一種方式是什麼?

+0

閱讀此問題的答案有類似問題。 http://stackoverflow.com/questions/380813/downcasting-in-java – Danny

回答

2

編輯:起初我想,你可以簡單地寫一個特殊的構造函數,需要BufferedImage。但那並不容易。所以我會建議寫一個類似這樣的包裝類:

package vtools; 

import java.awt.image.BufferedImage; 

public class Image { 

    BufferedImage image; 

    public Image(BufferedImage image) { 
     this.image = image; 
    } 

    // Add your methods, that modify the image or return the result. 
} 
+0

當我做一個錯誤顯示向上「沒有合適的構造找到BufferedImage的」,因爲它延伸的BufferedImage和buffred圖像具有不同的構造 – Radek

+0

我很抱歉,但你是對的。沒有這樣的構造函數。在仔細研究'BufferedImage'後,我想,你需要改變你的方法。你應該寫一個包裝類,而不是擴展'BufferedImage'。我會更新我的答案以反映這一點。 – nfechner

1

ImageIO來自核心Java類。它不知道如何將圖像讀入你的子類。如果你真的想要這樣做,你需要做的是擴展ImageIO(即,你必須繼承它,我不知道這是可能的)。或者你將不得不有一個vtools.Image構造函數,把一個BufferredImage作爲parm,然後通過它。