java - 如何在 Java 中将图像转换为 BufferedImage?

标签 java image swing awt

如何转换ImageBufferedImage在 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了解更多细节...然后你就不需要关心 ImageMediaTracker,因为 ImageIO 返回一个 BufferedImage

关于java - 如何在 Java 中将图像转换为 BufferedImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32714751/

相关文章:

perl - Mojolicious::Lite - 插入图片问题

java - 更改 Google map 中的图钉位置

java - 收到的 Intent 破坏了 Activity

php - 从我网站上可用的头像图像更改用户头像?

java - 创建 "bullet"类(Java/swing)

Java,如何进入JPanel

java - 为什么简单的 Swing 应用程序在显示窗口时不终止?

java - 无法在两行中创建两个 TextView

java - 处理 JSP 页面时发生异常...服务器遇到内部错误,无法满足此请求

iOS 背景图像在设备上不起作用