我需要在eclipse中用java读取16位位图(R5 G6 B5)。我尝试使用ImageIO.read(),但是我收到一个错误: javax.imageio.IIOException:无法读取输入文件! 在javax.imageio.ImageIO.read(ImageIO.java:1301)
相同的代码可以毫无问题地使用24位位图。
File file = new File("D:/MainScreen16BitR5G6B5.bmp");
imgBuf = ImageIO.read(file);
对于那种情况,还有其他方式吗?ImageIO.read()?还是一些特殊的图书馆 我搜索了一个解决方案,但我找不到一个。仅适用于tiff或如何转换为16位。
欢迎所有提示!谢谢你的帮助。
答案 0 :(得分:1)
这不太可能与位图的格式有关。您的错误消息有两个提示:
ImageIO.java
第1301行。假设您使用的是Java 7,如果我们查看ImageIO
source,我们可以看到ImageIO.read()
中符合您描述的相关代码是:
public static BufferedImage read(File input) throws IOException {
...
if (!input.canRead()) {
throw new IIOException("Can't read input file!"); // <- line 1301
}
...
}
请注意,input
是File
,这意味着File#canRead()
正在为您的图片返回false
。查看File#canRead()
的文档,我们看到它:
返回:
true
当且仅当此抽象路径名指定的文件存在且可由应用程序读取时;否则false
。
<强> TL; DR:强>
因此,我们可以得出结论真正的问题是该文件不存在,或者您没有读取它的权限,而不是问题文件格式。
因此请检查以确保您的路径名正确并且文件确实存在,并且您的应用程序有权读取它。当你遇到这样的错误时,这应该是你检查的第一件事。