18

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

4

2 回答 2

16

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

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

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

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

于 2013-10-06T19:37:09.630 回答
12

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

让用户了解图像的加载

  • ImageObserverinterface – 启用加载过程的监控,以便通知用户并在加载后尽快使用图像。

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

    • 图像已准备就绪 -getImage()方法返回,早在知道图像的任何内容之前。

      imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
      
  • 注意:java.awt.Componentimplements ImageObserver,所有子类也一样!

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

  • imageUpdate()ImageObserver–在必要时由 the 调用。您没有明确调用它!

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

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

    信息标志表

看看这个Oreilly 的解释

于 2013-10-06T19:43:32.250 回答