如何使用Java的drawImage()?我没有找到JDK文档。例如,所有drawImage签名都需要一个ImageObserver,但是这方面的文档对新用户没有多大帮助。
答案 0 :(得分:25)
你可以逃脱Graphics.drawImage(img, x, y, null)
[或类似]。 ImageObserver
参数是一个回调函数,用于通知您绘制操作的进度;并且只有在异步获取Image参数时才真正有用。
更清楚的是,如果您使用未完全加载的图片调用drawImage
,它将会:
Image
(所有已加载的内容)ImageObserver
基本上,如果您正在使用内存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
的情况下,其行为是在数据可用时重新绘制。