我有一個自定義類vtools.Image,它擴展了BufferedImage。java對象轉換
然後,我正在使用ImageIO.read從一個URL中讀取圖片,並將其作爲BufferedImage調整。
BufferedImage bfImg = ImageIO.read(imageUrl);
但我需要這個bfImg轉換成vtools.Image但是當我嘗試投它我得到一個ClassCastException錯誤。轉換這兩種方式的另一種方式是什麼?
我有一個自定義類vtools.Image,它擴展了BufferedImage。java對象轉換
然後,我正在使用ImageIO.read從一個URL中讀取圖片,並將其作爲BufferedImage調整。
BufferedImage bfImg = ImageIO.read(imageUrl);
但我需要這個bfImg轉換成vtools.Image但是當我嘗試投它我得到一個ClassCastException錯誤。轉換這兩種方式的另一種方式是什麼?
編輯:起初我想,你可以簡單地寫一個特殊的構造函數,需要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.
}
ImageIO來自核心Java類。它不知道如何將圖像讀入你的子類。如果你真的想要這樣做,你需要做的是擴展ImageIO(即,你必須繼承它,我不知道這是可能的)。或者你將不得不有一個vtools.Image構造函數,把一個BufferredImage作爲parm,然後通過它。
閱讀此問題的答案有類似問題。 http://stackoverflow.com/questions/380813/downcasting-in-java – Danny