2009-11-05 69 views

回答

25

您可以通过Graphics.drawImage(img, x, y, null) [或类似]逃脱。 ImageObserver参数是一个回调,通知您绘制操作的进度;并且只有在您异步获取Image参数时才有用。

更清晰,如果调用drawImage与不完全加载的图像将:

  1. 返回FALSE(立即)
  2. 绘制尽可能多的Image尽可能的(即加载全部)
  3. ,并在未来的某个时刻,调入ImageObserver当更多的图像可用

基本上,如果你与我的工作n内存Image(不管是从文件系统加载还是由程序构建)都不用担心参数ImageObserver。如果您通过网络加载Image,并且未明确等待加载,则需要使用ImageObserver以确保“完全”绘制Image

+0

非常感谢,这非常有帮助。 – 2016-08-03 22:20:51

1

其实我用drawImage()多次总是用ImageObserver参数设置为null。好吧,这并不意味着它没用,但我做了我所需要的任何东西,但不知道它的用途。

+0

:-)我也是 - 我不知道这是否会成为问题。 – 2009-11-06 00:31:30

8

Image对象未必完全加载。如果在不完整的图像上调用Graphics.drawImage,它将尽可能多地绘制图像,然后在加载更多图像时提醒ImageObserver(通过调用imageUpdate)。

ImageObserver可以为空,在这种情况下,您将不会收到任何通知。如果图像已知被加载,或者已经有另一个机制进行重绘,这是很常见的。

请注意,Component implements ImageObserver,其imageUpdate方法将导致repaint在受影响的区域。

+1

'imageUpdate'也被称为动画图像。 – 2009-11-06 00:26:46

1

正如其他人所暗示的,这个API是在假设将要呈现的图像将被加载到网络上时构思的。当您要求工具包加载图像时,假设它只是一个外壳,并且知道其大小和像素所需的字节仍然沿着网线爬行。

在这种情况下,drawImage在第一次调用时可能不会呈现任何内容。随着大小和像素可用,ImageObserver将被通知。在Component implements ImageObserver的情况下,其行为是在数据可用时重新绘制。

相关问题