java创建image类_关于java:如何使用文件作为参数创建BufferedImage新类

我想创建一个新类,因为我想创建一些新方法,该方法扩展了BufferedImage并接受一个文件(一个bmp图片)作为参数。

就像这里发生的事情:

BufferedImage image = ImageIO.read(new File(dir +"coffeecup.png"));

浏览文档时,我发现BufferedImage类具有两个构造函数:

公共BufferedImage(ColorModel cm,WritableRaster栅格,

boolean isRasterPremultiplied,

哈希表属性)

public BufferedImage(int width,

整数高度

int imageType)

浏览所有参数的文档时,我没有注意到哪个参数引用了文件(如果有)。

那么,如何创建一个新的BufferedImage类却以文件作为参数之一呢?

为什么不能只使用BufferedImage image = ImageIO.read(new File(dir +"coffeecup.bmp")); ???

因为我想创建一些其他方法。

好吧...什么样的方法,为什么? 什么阻止了你? 就目前而言,很难猜测您真正想要的是什么,或者甚至是否可能要做。 BufferedImage类没有任何从文件读取的方法...

不要尝试复杂的事情。 除非您尝试覆盖某些实现(我建议您这样做),否则请遵循基本规则构成而非继承。 只需创建一个包装器类,而不是尝试非常规地扩展BufferedImage即可。 您正在尝试合并各种担忧,这是一个可怕的想法。 不能使用文件构造BufferedImage,因为这与Image无关。 如关于BufferedImage所述

It manages the image in memory and provides methods for storing, interpreting, and obtaining pixel data.

这就是它应该关心的。 因此,创建一个包装器类,您可以添加方法以执行任何操作

public class BufferedImageWrapper {

private BufferedImage bufferredImage;

public BufferedImageWrapper(File file) {

try {

bufferedImage = ImageIO.read(file);

} catch (IOException ex) {

ex.printStackTrace();

}

}

// your methods here

}

我可能应该声明我完全同意@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);

}

}

病态的peeskillets回答并使用了他的想法,但是也请您给予答复,它也非常有用。 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值