如何让ImageIO从InputStream读取:Java

6
我已经创建了一个可执行的jar文件(使用Eclipse),其中有一组图像(.png)文件需要包含在jar文件中。因此我添加了一个源文件夹,在该项目的/images文件夹中包含所有的图像。代码必须访问这些文件,以使用ImageIO.read(new File(path);)创建BufferedImage。
以前, 为了获取路径,我使用ClassName.class.getResource(/image/test.png).toURI(); 在执行jar时,会抛出错误URI is not hierarchical
所以现在我正在使用ClassName.class.getResourceAsStream(/image/test.png); 但如何使ImageIO从输入流中读取? 我尝试进行强制转换,如下:
InputStreamReader resourceBuff=ClassName.class.getResourceAsStream(/image/test.png);
ImageIO.read((ImageInputStream) new InputStreamReader(resourceBuff));

它会抛出错误InputStreamReader无法转换为ImageInputStream

2个回答

12

ImageIO.read()方法的参数是InputStream,因此将其强制转换为ImageInputStream是没有意义的。

其次,您不能将一个InputStreamReader对象强制转换为ImageInputStream,因为ImageInputStream与您所想的InputStreamReader无关。

此外,getResourceAsStream()方法返回的是InputStream。因此,您可以直接这样做。

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

4

ImageIO 类有一个实用方法可以读取InputStream并创建一个BufferedImage

还有一个实用方法可以从InputStream创建ImageInputStream


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接