Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert Image to BufferedImage in Java?

How to convert Image to BufferedImage in Java?

Note, that existing answer is apparently not correct, because it uses methods getWidth(null) and getHeight(null), which can return -1 if image is not loaded yet (Image is, by definition, an asynchronous object).

Please, provide either more correct answer, or more proofs that existing answer is already correct.

like image 691
Dims Avatar asked Oct 12 '25 10:10

Dims


1 Answers

If it's important to you, you can use a MediaTracker to "wait" for the image to be loaded, then you don't need to care about supplying a ImageObserver

try {
    MediaTracker mt = new MediaTracker(new JPanel());
    Image image = Toolkit.getDefaultToolkit().createImage("...");
    mt.addImage(image, 0);
    System.out.println("Wait for...");
    mt.waitForAll();
    System.out.println("I be loaded");

    BufferedImage bi = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = bi.createGraphics();
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();
} catch (InterruptedException ex) {
    ex.printStackTrace();
}

Have a look at MediaTracker JavaDocs for more details

I don't wish to add any GUI, I just need to download image or fail

Okay, if you "need to download" the image, then you can just use ImageIO.read(URL), have a look at Reading/Loading an Image for more details ... then you won't need to care about Image or MediaTracker, as ImageIO returns a BufferedImage

like image 200
MadProgrammer Avatar answered Oct 15 '25 01:10

MadProgrammer