Java的drawImage()应该如何使用?我没有发现 JDK 文档非常即将发布。例如,所有的 drawImage 签名都需要一个 ImageObserver,但是这方面的文档对新用户不是很有帮助。
4 回答
你可以逃脱Graphics.drawImage(img, x, y, null)
[或类似的]。该ImageObserver
参数是一个回调,用于通知您绘制操作的进度;并且只有在异步获取 Image 参数时才真正有用。
更清楚地说,如果您drawImage
使用未完全加载的图像进行调用,它将:
- 返回假(立即)
- 尽可能多地绘制
Image
(所有已加载) - 并且,在将来的某个时候,调用
ImageObserver
更多图像可用的时间
基本上,如果您正在使用内存Image
s(从文件系统加载或由您的程序构造),请不要担心ImageObserver
参数。如果您正在Image
通过网络加载 s 并且没有明确地等待它们加载,那么您需要使用 anImageObserver
来确保“完全”绘制一个Image
.
Image
对象不一定完全加载。如果Graphics.drawImage
在不完整的图像上调用,它将尽可能多地绘制图像,然后在加载更多图像时提醒ImageObserver
(通过调用)。imageUpdate
可以为空,在这种ImageObserver
情况下您不会收到任何通知。如果已知图像已加载,或者已经有另一种机制进行重绘,这很常见。
注意,Component
implements ImageObserver
,它的imageUpdate
方法会导致一个repaint
受影响的区域。
实际上我使用drawImage()
了很多次,ImageObserver
参数设置为null
. 好吧,这并不意味着它没用,但我做了我需要的任何事情,却不知道它的用途..
正如其他人所暗示的那样,这个 API 是在假设要渲染的图像将通过网络加载时构思的。当您要求工具包加载图像时,假设它只是一个外壳,并且知道其大小和像素所需的字节仍在网络中爬行。
在这种情况下,drawImage 在第一次被调用时可能什么也不渲染。当尺寸和像素可用时,会通知 ImageObserver。在 的情况下Component implements ImageObserver
,它的行为是在数据可用时重新绘制。