用Java读取16位位图

时间:2014-08-05 07:58:52

标签: java bitmap javax.imageio

我需要在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位。

欢迎所有提示!谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

这不太可能与位图的格式有关。您的错误消息有两个提示:

  1. 异常文本是“无法读取输入文件!”。
  2. 例外来源为ImageIO.java第1301行。
  3. 假设您使用的是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
        }
        ...
    }
    

    请注意,inputFile,这意味着File#canRead()正在为您的图片返回false。查看File#canRead()的文档,我们看到它:

      

    返回: true当且仅当此抽象路径名指定的文件存在且可由应用程序读取时;否则false

    <强> TL; DR:

    因此,我们可以得出结论真正的问题是该文件不存在,或者您没有读取它的权限,而不是问题文件格式。

    因此请检查以确保您的路径名正确并且文件确实存在,并且您的应用程序有权读取它。当你遇到这样的错误时,这应该是你检查的第一件事。