【问题标题】:What is an ImageObserver?什么是 ImageObserver?
【发布时间】:2013-10-13 07:50:57
【问题描述】:

当您绘制图像时,它需要图像观察者。据我所知,BufferedImage 是一个图像观察者。但我的问题是,什么定义了图像观察者,它有什么作用?我很困惑。

【问题讨论】:

  • 你是如何绘制图像的?你能提供一些代码吗?
  • 我使用的是 BufferedImage,所以我只是将它设置为 null,但因为我遇到它,所以我想找到它的作用的解释。我搜索了谷歌,但找不到确切的解释。

标签: java awt bufferedimage imageobserver


【解决方案1】:

首先,ImageObserver 是一个接口。根据docs

一个异步更新接口,用于在构建 Image 时接收有关 Image 信息的通知。

换句话说,它是一种使用图像的面向对象的方式,可以在完全创建之前对其进行修改。每次修改图像时都会调用方法imageUpdate(Image img, int infoflags, int x, int y, int width, int height)。如果它想收到有关进一步更改的通知,则返回true,否则返回false。此方法可用于强制大小、分辨率、颜色等。它还可以让您对错误进行一些控制(ERROR 标志)。欲了解更多信息,请参阅this

观察者还可以处理有关图像的重要信息 - 例如,如果我们在屏幕上绘制图像并在渲染完成之前将其更改为更大的图像,则必须有一种方法可以告知我们任何事情'重新绘制维度已更改(分配更多空间)并且它必须处理更改。在这种情况下,ImageObserver异步这一事实极为重要。

【讨论】:

    【解决方案2】:

    ImageObserver 是一个接口,它具有处理图像加载状态通知的方法。它可以根据需要使用它来重新显示。 JFrameApplet 都实现了ImageObserver 接口。

    让用户了解加载一个图像

    • ImageObserver interface – 启用对加载过程的监控,以便 可以通知用户,并且图像一旦加载就可以尽快使用。

    • 异步加载图像 - 如何知道图像何时准备就绪。

      • 图像已准备就绪——getImage() 方法返回,早在一切就绪之前 知道图像。

        imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
        
    • 注意:java.awt.Component 实现了ImageObserver,所有的子类都这样做 好吧!

    • g.drawImage(imge, 0,0, this) -- 这是指ImageObserver 实例。

    • imageUpdate() – 必要时由ImageObserver 调用。你不打电话 明确!

      • 如果图片完整,则返回false
      • 如果图片不完整需要更新,返回true
    • ImageObserver.ALLBITS = 32

    • 各种常量组合起来形成infoflags 参数,它表示 是否所有信息都可用。

    看看thisOreilly's explanation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2019-06-24
      • 2017-04-21
      • 1970-01-01
      相关资源
      最近更新 更多