如何在Java中将Image
转换为BufferedImage
?
请注意,现有答案显然不正确,因为它使用方法getWidth(null)
和getHeight(null)
,如果图像尚未加载,则可以返回-1
(按定义,Image
是异步对象)。
请提供更正确的答案,或更多证明现有答案已经正确的证据。
如何在Java中将Image
转换为BufferedImage
?
请注意,现有答案显然不正确,因为它使用方法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以获取更多详细信息。
好的,如果您“需要下载”图像,则可以使用我不想添加任何GUI,我只需要下载图像或失败
ImageIO.read(URL)
,请参阅读取/加载图像以获取更多详细信息...然后您将不需要关心Image
或MediaTracker
,因为ImageIO
返回一个BufferedImage
。MediaTracker
зҡ„жһ„йҖ еҮҪж•°дёӯ Component
зҡ„зӣ®зҡ„жҳҜд»Җд№ҲпјҹжҲ‘дёҚжғіж·»еҠ д»»дҪ• GUIпјҢеҸӘйңҖиҰҒдёӢиҪҪеӣҫеғҸжҲ–еӨұиҙҘгҖӮ - DimsComponent
充当 MediaTracker
的 ImageObserver
。如果您“需要下载”图像,则可以使用 ImageIO.read(URL)
,请参阅读取/加载图像以获取更多详细信息...然后您就不需要关心 Image
或 MediaTracker
,因为 ImageIO
返回一个 BufferedImage
。 - MadProgrammerImage
实例形式存在的图像。 - DimsMediaTracker
,创建 Component
不会“启动”任何 UI,它只是用于方便 ImageObserver
API 的要求。 - MadProgrammer