如何从InputStream中读取ImageIO:Java

时间:2014-07-18 11:50:18

标签: java image file-io executable-jar javax.imageio

我已经创建了可执行jar文件(使用Eclipse),有一组图像(.png)文件将被包含在jar中。所以我在项目的/images文件夹中添加了一个包含所有图像的源文件夹。代码必须使用ImageIO.read(new File(path);

访问这些文件以创建BufferedImage

此前, 要获得我使用ClassName.class.getResource(/image/test.png).toURI();

的路径

在执行jar时,它会抛出错误 URI不是分层的

所以现在我正在使用ClassName.class.getResourceAsStream(/image/test.png);

但是如何从Inputstream读取ImageIO? 我尝试演员如下

InputStreamReader resourceBuff=ClassName.class.getResourceAsStream(/image/test.png);
ImageIO.read((ImageInputStream) new InputStreamReader(resourceBuff));

抛出错误无法将InputStreamReader强制转换为ImageInputStream

2 个答案:

答案 0 :(得分:9)

ImageIO.read()InputStream作为参数,因此无法将其投放到ImageInputStream

其次,您无法将InputStreamReader对象投射到ImageInputStream,因为ImageInputStream与您想到的InputStreamReader无关。

此外getResourceAsStream()会返回InputStream。所以你可以直接这样做。

InputStream resourceBuff = YourClass.class.getResourceAsStream(filepath);
BufferedImage bf = ImageIO.read(resourceBuff);

答案 1 :(得分:4)

ImageIO类有readInputStream的实用方法,并创建BufferedImage

ImageInputStream还有createInputStream的实用方法。