我想创建一个新类,因为我想创建一些新方法,它扩展了BufferedImage并将文件(bmp图片)作为参数。 就像这里发生的一样:
BufferedImage image = ImageIO.read(new File(dir + "coffeecup.png"));
查看文档,我发现BufferedImage类有两个构造函数:
通过所有参数的文档,我没有注意到哪个参数引用了一个文件,如果有的话。 那么我需要如何创建一个新的BufferedImage类,但是将文件作为参数之一呢?
答案 0 :(得分:3)
不要尝试复杂的事情。除非你试图覆盖一些实现(我建议反对)遵循基本规则组合而不是继承。只需创建一个包装类,而不是试图不经意地扩展BufferedImage。你正试图结合一些可怕的想法。无法使用文件构造BufferedImage,因为这不是Image的关注点。正如关于BufferedImage所述
它管理内存中的图像,并提供存储,解释和获取像素数据的方法。
这就是它应该关注的全部内容。因此,创建一个包装类,您可以添加方法来执行任何操作
public class BufferedImageWrapper {
private BufferedImage bufferredImage;
public BufferedImageWrapper(File file) {
try {
bufferedImage = ImageIO.read(file);
} catch (IOException ex) {
ex.printStackTrace();
}
}
// your methods here
}
答案 1 :(得分:2)
我应该说我完全赞同@peeskillet,并且不建议使用我在下面建议的内容。 : - )
但是如果你真的想扩展BufferedImage
,你可以做这样的事情(灵感来自我的旧EasyImage类,因为某种原因在沙箱中......):
public class EasyImage extends BufferedImage {
public EasyImage(File iput) throws IOException {
this(ImageIO.read(input));
}
public EasyImage(BufferedImage image) {
this(image.getColorModel(), image.getRaster());
}
private EasyImage(ColorModel cm, WritableRaster raster) {
super(cm, raster, cm.isAlphaPremultiplied(), null);
}
public boolean write(String format, File output) throws IOException {
return ImageIO.write(this, format, output);
}
}