什么是图像观察者?

2022-09-02 21:01:09

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


答案 1

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

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

换句话说,这是一种面向对象的方式,可以使用可以在完全创建之前进行修改的图像。每当修改图像时,都会调用方法。如果它希望收到有关进一步更改和其他方面的通知,它将返回。这种方法可用于强制尺寸,分辨率,颜色等。它还为您提供了对错误(标志)的一些控制。有关详细信息,请参阅此处imageUpdate(Image img, int infoflags, int x, int y, int width, int height)truefalseERROR

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


答案 2

ImageObserver是一个接口,具有用于处理图像加载状态通知的方法。它可以根据需要将其用于重新显示。 并且两者都实现接口。JFrameAppletImageObserver

让用户随时了解图像的加载情况

  • ImageObserver接口 – 启用对加载过程的监视,以便用户可以获得通知,并且在加载图像后可以尽快使用图像。

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

    • 图像已准备就绪 – 方法返回,远在对图像的任何事情了解之前。getImage()

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

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

  • imageUpdate()– 必要时由 调用。你没有明确地称呼它!ImageObserver

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

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

    info flag table

看看这个Oreilly的解释


推荐