2013-10-06 33 views
12

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

+0

你是如何绘制图像的?你能提供一些代码吗? – Heskja

+0

我使用的是一个BufferedImage,所以我只是将它设置为null,但是由于我遇到了它,我想找到一个解释。我搜索了Google,但找不到解释它究竟是什么。 – Troubleshoot

回答

11

首先,ImageObserver接口。根据docs

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

换句话说,它是一种面向对象的方式来使用可以完全创建之前修改的图像。任何时候图像被修改都会调用方法imageUpdate(Image img, int infoflags, int x, int y, int width, int height)。如果它想要被通知进一步的变化,则返回true,否则返回false。这种方法可以用来强制大小,分辨率,颜色等。它也给你一些错误的控制(ERROR标志)。欲了解更多信息,请参阅this

观察者也可能会处理关于图像的重要信息 - 例如,如果我们在屏幕上绘制图像并在绘制完成之前将其更改为更大的图像,则必须有方法通知我们重新说明维度已经发生变化(分配更多空间),并且必须处理这些变化。在这种情况下,ImageObserver异步的事实是非常重要的。

9

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

要告诉用户关于一个图像加载

  • ImageObserver接口 - 使加载过程的监控,使 用户的知情权和图像可以尽快使用,一旦它加载。

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

    • 的图像已准备就绪 - 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 explanationAlso take a look at this manual it is really helpful

相关问题