ImageIO.read 返回 NULL,没有错误

2022-09-02 05:23:13

下面的代码似乎不起作用,即使文件看起来很好。

    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()),并将文件包装在输入流中。


答案 1

ImageIO.read(*...)将仅加载这些图像类型 GIFPNGJPEGBMPWBMP

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

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

我确实意识到这不是解决特定原始问题的方法,而是对所提问题的解决方案。


答案 2

ImageIO.read(file);如果未找到已注册的 ImageReader,则返回 null。请检查您是否注册了任何图像阅读器

我认为这个代码片段可以帮助你

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()


推荐