Search code examples
javaimageembedded-resourcebufferedimage

Load image from a filepath via BufferedImage


I have a problem with Java application, particular in loading a image from a location in my computer.

Following this post I used a BufferedImage and a InputFileStream to load an image on my computer. First, I put the image (pic2.jpg) into the source code and that is working. However, if I put the image to another place (let's say C:\\ImageTest\pic2.jpg), Java IDE show me an IllegalArgumentException

return ImageIO.read(in);

here is the code:

public class MiddlePanel extends JPanel {
    private BufferedImage img;

    public MiddlePanel(int width) {    
        //img = getImage("pic2.jpg");       
        img = getImage("C:\\ImageTest\\pic2.jpg");

        this.setPreferredSize(new Dimension(800,460));

    }

    public void paintComponent(Graphics g) {
        // ...
    }

    private BufferedImage getImage(String filename) {
        // This time, you can use an InputStream to load
        try {
            // Grab the InputStream for the image.                    
            InputStream in = getClass().getResourceAsStream(filename);

            // Then read it.
            return ImageIO.read(in);
        } catch (IOException e) {
            System.out.println("The image was not loaded.");
            //System.exit(1);
        }

        return null;
    }
}

Solution

  • getResource & getResourceAsStream do not work with file paths, but paths relative the code base. If the code base is C: then a relative path that would locate the resource is /ImageTest/pic2.jpg.

    ..difference between load file by FileInputStream and getResourceAsStream?

    One major difference is that the getResource.. will work with a resource inside a Jar, which is no longer a File. Therefore FileInputStream cannot be used to access such a resource.