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