获取图像的高度和宽度时,ImageObserver字段的用途是什么?

时间:2015-08-07 03:01:35

标签: java image swing imageobserver

Java有这种方法:getWidth(ImageObserver observer)

返回图像的宽度。这个方法看起来很简单,直到你到达需要ImageObserver的部分。 ImageObserver作为参数的目的是什么。还有其他方法吗?

请注意,我无法使用此处提到的ImageIcon:Getting Height and Width of Image in Java without an ImageObserver 原因是因为我最终将从JFileChooser加载我的图像。这也是为什么我不能仅使用常数来表示高度和宽度的原因。我不知道用户想要使用哪张照片。

另外,由于这两个原因,我觉得我不应该发布我的代码

A)我的代码不是SSCCE代码的任何地方:http://sscce.org/

B)这是一个普遍的问题,我觉得我的代码太具体了。

1 个答案:

答案 0 :(得分:3)

来自JavaDocs

  

确定图像的宽度。如果宽度尚不知道,则此方法返回-1,稍后会通知指定的ImageObserver对象。

这基本上意味着如果Image未完全实现(因为它通常在后台线程中加载),则在知道值时将通知ImageObserver

更好的解决方案是使用ImageIO API,因为read方法在图像完全加载(并实现)之前不会返回,或者抛出IOException如果无法加载图片。

有关详细信息,请查看Reading/Loading an Image

如果您“确实”必须使用ImageToolkit来加载它们,那么您还应该看看MediaTracker,但是从BufferedImage开始(这是ImageIO.read)返回Image,真的没有多少需要