【问题标题】:Why is ImageIO.read() so slow compared to Toolkit.getDefaultToolkit().getImage()?为什么 ImageIO.read() 比 Toolkit.getDefaultToolkit().getImage() 慢?
【发布时间】:2014-02-24 01:07:26
【问题描述】:

我使用 ImageIO.read() 从磁盘获取一些 JPEG 文件,但它太慢了...读取每个文件需要 250 毫秒,而 Toolkit.getDefaultToolkit().getImage() 需要不到 10 毫秒(实际上它在我的测试中显示为 0ms)!

现在我问自己:如果 Toolkit.getDefaultToolkit().getImage() 这么快,为什么 ImageIO.read() 这么慢?


这速度超级快,但不返回 BufferedImage:

Image image = Toolkit.getDefaultToolkit().getImage(f.getAbsolutePath());

这很慢(读取 2.3MB 3264x1840 JPEG 文件大约需要 250 毫秒):

BufferedImage image = ImageIO.read(f);

【问题讨论】:

    标签: java image javax.imageio


    【解决方案1】:

    一般不会。

    ImageIO 在调用它的同一线程上下文中读取图像,Toolkit.getDefaultToolkit().getImage() 使用单独的背景 Thread 加载图像并(几乎)立即返回。

    这就是为什么你有MediaTracker#waitForAllMediaTracker#waitForIDImageObserver。这一切都监视由Toolkit.getDefaultToolkit().getImage() 创建的图像加载过程的状态,因此他们知道图像加载何时完成...

    【讨论】:

    • 嗯...你确定吗?如果是,我怎么能对 ImageIO.read() 做同样的事情?
    • ImageIO.read 包装到一个单独的线程中。这意味着在ImageIO.read 之前,您将没有任何图像数据...
    • 是的,你是对的。如果我在调用 getImage() 后尝试检查其大小,则图像未完全加载。
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 2011-03-23
    • 2019-12-18
    • 2015-10-04
    • 2012-09-16
    • 2016-10-06
    • 2020-11-27
    • 2011-10-19
    相关资源
    最近更新 更多