【问题标题】:Exception while reading image ==java.lang.IllegalArgumentException: image == null读取图像时出现异常 ==java.lang.IllegalArgumentException: image == null
【发布时间】:2012-07-11 21:33:33
【问题描述】:

我正在阅读一张图片并想要获取图片格式。

private static String getFormatName(Object o) {
try {
    // Create an image input stream on the image
    ImageInputStream iis = ImageIO.createImageInputStream(o);

    // Find all image readers that recognize the image format
    Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
    if (!iter.hasNext()) {
        // No readers found
        return null;
    }

    // Use the first reader
    ImageReader reader = (ImageReader)iter.next();

    String name = reader.getFormatName();
    iis.close();
    return name;
} catch (IOException e) {
}
// The image could not be read
return null;

}

当我执行它时,我得到以下异常,

java.lang.IllegalArgumentException: image == null!

【问题讨论】:

  • 好像没有找到图片(image=null),可能是路径不对?你检查堆栈跟踪了吗?
  • 你为对象传递了什么以及在哪一行抛出了 IllegalArgumentException?是 ImageIO.createImageInputStream 抛出的吗?
  • @VICKY-TSC - 出于好奇,您为什么不将我的答案标记为正确答案?我相信您确实需要我列出的所有 4 行代码才能正常工作。 ??? - 谢谢

标签: java image iterator image-formats


【解决方案1】:

更新:你还需要调用 setInput()

您无法关闭流。当您这样做时,读者将如何阅读图像?执行以下操作:

reader.setInput(iis);
String name = reader.getFormatName();
iis.close();
return name;

【讨论】:

  • @VICKY-TSC - 我添加了一行额外的代码以使其工作(抱歉,第一次忘记了)。
【解决方案2】:

在读者有机会阅读格式之前,您正在关闭流..

所以语句序列是:

reader.getFormatName();
iis.close();
return name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2012-11-07
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多