什么是ImageObserver?

时间:2013-10-06 19:28:46

标签: java awt bufferedimage imageobserver

绘制图像时需要图像观察者。据我所知,到目前为止,BufferedImage是一个图像观察者。但我的问题是,图像观察者的定义是什么,它做了什么?我很困惑。

2 个答案:

答案 0 :(得分:13)

首先,ImageObserver界面。根据{{​​3}}:

  

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

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

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

答案 1 :(得分:10)

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参数,表示 是否所有信息都可用。

    info flag table

查看thisOreilly's explanation