Reputation: 51249
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
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