20

Java的drawImage()应该如何使用?我没有发现 JDK 文档非常即将发布。例如,所有的 drawImage 签名都需要一个 ImageObserver,但是这方面的文档对新用户不是很有帮助。

4

4 回答 4

30

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

更清楚地说,如果您drawImage使用未完全加载的图像进行调用,它将:

  1. 返回假(立即)
  2. 尽可能多地绘制Image(所有已加载)
  3. 并且,在将来的某个时候,调用ImageObserver更多图像可用的时间

基本上,如果您正在使用内存Images(从文件系统加载或由您的程序构造),请不要担心ImageObserver参数。如果您正在Image通过网络加载 s 并且没有明确地等待它们加载,那么您需要使用 anImageObserver来确保“完全”绘制一个Image.

于 2009-11-05T23:48:49.870 回答
8

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

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

注意,Componentimplements ImageObserver,它的imageUpdate方法会导致一个repaint受影响的区域。

于 2009-11-05T23:55:42.413 回答
1

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

于 2009-11-05T23:45:33.667 回答
1

正如其他人所暗示的那样,这个 API 是在假设要渲染的图像将通过网络加载时构思的。当您要求工具包加载图像时,假设它只是一个外壳,并且知道其大小和像素所需的字节仍在网络中爬行。

在这种情况下,drawImage 在第一次被调用时可能什么也不渲染。当尺寸和像素可用时,会通知 ImageObserver。在 的情况下Component implements ImageObserver,它的行为是在数据可用时重新绘制。

于 2009-11-06T00:05:20.273 回答