Java 为什么ImageIO.read()比Toolkit.getDefaultToolkit().getImage()慢?
我使用ImageIO.read()从磁盘获取一些JPEG文件,但速度太慢了。。。读取每个文件需要250毫秒,而Toolkit.getDefaultToolkit().getImage()需要不到10毫秒(实际上在我的测试中显示为0毫秒) 现在我问自己:如果Toolkit.getDefaultToolkit().getImage()如此之快,为什么ImageIO.read()如此之慢Java 为什么ImageIO.read()比Toolkit.getDefaultToolkit().getImage()慢?,java,image,javax.imageio,Java,Image,Javax.imageio,我使用ImageIO.read()从磁盘获取一些JPEG文件,但速度太慢了。。。读取每个文件需要250毫秒,而Toolkit.getDefaultToolkit().getImage()需要不到10毫秒(实际上在我的测试中显示为0毫秒) 现在我问自己:如果Toolkit.getDefaultToolkit().getImage()如此之快,为什么ImageIO.read()如此之慢 这非常快,但不会返回BuffereImage: Image image = Toolkit.getDefault
这非常快,但不会返回BuffereImage:
Image image = Toolkit.getDefaultToolkit().getImage(f.getAbsolutePath());
这很慢(读取2.3MB 3264x1840 JPEG文件大约需要250毫秒):
一般来说,不是这样
ImageIO
在调用它的同一线程上下文中读取图像。getDefaultToolkit()。getImage()使用单独的背景thread
加载图像并立即返回
这就是为什么您有MediaTracker#waitForAll
和MediaTracker#waitForID
和ImageObserver
。这将监控由Toolkit.getDefaultToolkit().getImage()
创建的映像加载过程的状态,以便他们知道映像加载何时完成…通常情况下不会
ImageIO
在调用它的同一线程上下文中读取图像。getDefaultToolkit()。getImage()使用单独的背景thread
加载图像并立即返回
这就是为什么您有
MediaTracker#waitForAll
和MediaTracker#waitForID
和ImageObserver
。这都会监视由Toolkit.getDefaultToolkit().getImage()
创建的映像加载过程的状态,以便它们知道映像加载何时完成…Hm。。。你确定?如果是,如何对ImageIO.read()执行相同的操作?将ImageIO.read
包装到单独的线程中。这意味着,在ImageIO.read
之前,您不会有任何图像数据……是的,您是对的。如果我在调用getImage()之后尝试检查图像的大小,则图像未完全加载。Hm。。。你确定?如果是,如何对ImageIO.read()执行相同的操作?将ImageIO.read
包装到单独的线程中。这意味着,在ImageIO.read
之前,您不会有任何图像数据……是的,您是对的。如果在调用getImage()之后尝试检查图像的大小,则图像未完全加载。
BufferedImage image = ImageIO.read(f);