我有一个自定义类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