代码之家  ›  专栏  ›  技术社区  ›  Jens Schauder

如何在Java中完全加载图像

  •  3
  • Jens Schauder  · 技术社区  · 14 年前

    Java图像API假定异步加载。各种方法都将图像观测器作为一个参数,当图像完全加载后,可能会得到通知。

    另一方面,某些类型的图像(例如BufferedImages)不使用ImageObserver,永远不会调用它。

    那么,等待图像完全加载的代码看起来如何?

    我想要一种方法

    public void waitUntilLoaded(Image img){
        ...
    }
    

    这样可以保证图像返回时完全加载。

    3 回复  |  直到 7 年前
        1
  •  4
  •   eaj    14 年前

    一个好的选择是 java.awt.MediaTracker . 有一个很好的代码示例 in the API documentation . 简而言之,您创建一个MediaTracker对象来跟踪组件的图像,告诉它您要跟踪哪些图像,然后调用 tracker.waitForID(n) 在指定的图像完成加载之前,它将被阻止。

    很明显,您需要将其从事件线程中排除——但您知道这一点。:)

        2
  •  1
  •   Powerlord    14 年前

    使用A javax.imageio.event.IIOReadProgressListener 并覆盖其 imageComplete 方法而不是 ImageObserver .

    这是假设您可以将代码更改为使用 javax.imageio.ImageReader 实际阅读(使用 ImageIO 的静态方法)。

        3
  •  0
  •   Lasbleis    7 年前

    我发现的另一种选择是等到 img.getWidth() 返回与-1不同的值。你可以用更干净的方法 Threads while 循环。