2011-11-21 62 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,然后通过它。