Java Graphics.drawImage()如何工作以及ImageObserver的作用是什么

时间:2009-11-05 23:36:32

标签: java drawimage

如何使用Java的drawImage()?我没有找到JDK文档。例如,所有drawImage签名都需要一个ImageObserver,但是这方面的文档对新用户没有多大帮助。

4 个答案:

答案 0 :(得分:25)

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

更清楚的是,如果您使用未完全加载的图片调用drawImage,它将会:

  1. 返回false(立即)
  2. 尽可能多地绘制Image(所有已加载的内容)
  3. 并且,在将来某个时候,当有更多图片可用时,请致电ImageObserver
  4. 基本上,如果您正在使用内存Image(从文件系统加载,或由您的程序构建),请不要担心ImageObserver参数。如果您在网络中加载Image并且未明确等待加载,则需要使用ImageObserver来确保“完全”绘制Image。< / p>

答案 1 :(得分:8)

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

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

请注意Component实施ImageObserver,其imageUpdate方法会在受影响区域产生repaint

答案 2 :(得分:1)

实际上我多次使用drawImage() ImageObserver参数设置为null。好吧,这并不意味着它没用,但我在不知道它的用途的情况下做了我需要的任何事情......

答案 3 :(得分:1)

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

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