如何转换Image
至 BufferedImage
在 Java 中?
请注意,existing answer显然不正确,因为它使用方法 getWidth(null)
和 getHeight(null)
,如果图像尚未加载,它可以返回 -1
(根据定义,Image
是一个异步对象)。
请提供更正确的答案,或现有答案已经正确的更多证据。
最佳答案
如果这对您很重要,您可以使用 MediaTracker
来“等待”图像加载,那么您无需关心提供 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();
}
看看MediaTracker
JavaDocs了解更多详情
I don't wish to add any GUI, I just need to download image or fail
好的,如果你“需要下载”图像,那么你可以使用ImageIO.read(URL)
,看看Reading/Loading an Image了解更多细节...然后你就不需要关心 Image
或 MediaTracker
,因为 ImageIO
返回一个 BufferedImage
关于java - 如何在 Java 中将图像转换为 BufferedImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32714751/