Dims
Dims

Reputation: 51249

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.

Upvotes: 4

Views: 2873

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347332

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

Upvotes: 4

Related Questions