【问题标题】:Read a 16 Bit Bitmap in Java在 Java 中读取 16 位位图
【发布时间】:2014-08-05 16:23:56
【问题描述】:

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

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

【问题讨论】:

  • I need to read a 16 Bit Bitmap (R5 G6 B5) with java in eclipse. 请注意,Eclipse 只是一个 IDE,一个用于编写代码的工具。它不会影响您的代码,因此 in eclipse 您的程序将像 out of eclipse 一样运行 :)
  • 还要确保您的文件存在并且实际上是有效的 16 位 BMP。如果您告诉我们您使用的是什么版本的 JDK,将会很有帮助。
  • ImageIO 可以读取这样一种“特殊”格式似乎与此无关(尽管我确实知道这一点)。你可能想试试oracle.com/technetwork/java/javase/tech/jai-142803.html,那里会有不同的新图像阅读器实现。
  • imgBuf 定义为什么?此外,您的文件名很有可能更像D:\\MainScreen16BitR5G6B5.bmp
  • @Marco13 它过去无法读取 16 位位图,但我相信在过去几年的某个时候添加了支持,尽管我没有具体的来源。无论如何,错误消息和ImageIO.java 源代码行显示它实际上是文件 I/O 错误,而不是格式错误(如果不支持 16 位格式 可能会出现下一个错误,但我们还没到那个地步)。

标签: java bitmap javax.imageio


【解决方案1】:

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

  1. 异常文本是“无法读取输入文件!”。
  2. 异常来源是ImageIO.java line 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
    }
    ...
}

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

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

TL;DR:

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

因此,请检查以确保您的路径名正确,并且该文件确实存在,并且您的应用程序有权读取它。当您遇到此类错误时,这应该始终是您首先检查的内容。

【讨论】:

  • 非常感谢!我用 file.exist 和 file.canRead 对其进行了测试。这是我的错,我的文件名有错字:-/
猜你喜欢
  • 2012-06-13
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 2017-07-02
  • 2015-12-13
相关资源
最近更新 更多