ImageIO.read返回NULL,没有错误

时间:2012-03-30 13:29:47

标签: java image

以下代码似乎无法正常工作,即使该文件看起来很好。

    images = new BufferedImage[32];
    FileInputStream fis = null;
    for (int i = 0; i < 32; i++) {
        File file = new File("tiles\\"+i+".bmp");
        if (!file.exists()){
            System.out.println("File  "+i+" failed");
        }
        try { 
            fis = new FileInputStream(file); 
        } catch (FileNotFoundException e) { 
            System.err.println(e + "" + i); 
        }
        try { 
            images[i] = ImageIO.read(fis); 
        } catch (IOException e) { 
            System.err.println(e + "" + i); 
        }
        if (images[i] == null) {
            System.out.println("Image "+i+" failed");
        }
    }

提前感谢您的帮助。

编辑:结果是我尝试使用Graphics.drawImage(images [0]);,它给我一个空指针异常。这段代码完成得很好。

编辑:已更改按建议移动了if(!file.exists()),并将文件包装在输入流中。

3 个答案:

答案 0 :(得分:33)

ImageIO.read(*...)只会加载以下图片类型 GIF PNG JPEG BMP ,和 WBMP

任何其他图片类型都会返回null而不会出错。

参考: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

我确实知道这不是特定原始问题的解决方案,但它是问题的解决方案。

答案 1 :(得分:8)

如果未找到已注册的 ImageReader

ImageIO.read(file); 将返回null。请检查您是否注册了 ImageReader

我认为此代码段可以帮助您

File file = new File("bear.jpg"); // I have bear.jpg in my working directory  
    FileInputStream fis = new FileInputStream(file);  
    BufferedImage image = ImageIO.read(fis); //reading the image file  

您只需将文件包装到 FileInputStream 中,然后将其传递给 read()

答案 2 :(得分:0)

尝试将InputStream包装成BufferedInputStream:

fis = new FileInputStream(file); ==&GT; new BufferedInputStream(new FileInputStream(file));