Java 如何获取图像的高度和宽度?
为什么下面的代码位返回高度:-1,这意味着高度还未知。如何获得图像的高度Java 如何获取图像的高度和宽度?,java,image,asynchronous,Java,Image,Asynchronous,为什么下面的代码位返回高度:-1,这意味着高度还未知。如何获得图像的高度 try { // Create a URL for the image's location URL url = new URL("http://bmw-2006.auto-one.co.uk/wp-content/uploads/bmw-m3-2006-3.jpg"); // Get the image java.awt.Image image = To
try {
// Create a URL for the image's location
URL url = new URL("http://bmw-2006.auto-one.co.uk/wp-content/uploads/bmw-m3-2006-3.jpg");
// Get the image
java.awt.Image image = Toolkit.getDefaultToolkit().createImage(url);
System.out.println("Height: " + image.getHeight(null));
} catch (MalformedURLException e) {
} catch (IOException e) {
}
使用或代替。它将在加载时阻塞,返回后将知道图像的宽度和高度
例如。
或者,向正在由异步加载的映像中添加一个,并等待它完全加载。您希望这样:
try {
// Create a URL for the image's location
URL url = new URL("http://bmw-2006.auto-one.co.uk/wp-content/uploads/bmw-m3-2006-3.jpg");
// Get the image
Image image = ImageIO.read(url);
System.out.println("Height: " + image.getHeight(null));
}
catch(MalformedURLException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
java.awt.Toolkit
方法不会阻塞,因此将返回-1,并在加载时通知观察者(在您的情况下不是,因为它是空的)。如果您确实希望异步执行,那么需要以图像观察者的形式提供回调
哦,不要忽略异常,至少要打印堆栈跟踪 因为图像是在后台异步加载的 正如
getHeight()
javadoc所说,您需要提供一个(而不是null
),在加载映像时调用它。Toolkit\createImage(…)
是非阻塞的。通常我宁愿使用javax.imageio.imageio
来读取图像
要等待工具包#createImage(…)
,请使用:
MediaTracker mediaTracker = new MediaTracker(component);
mediaTracker.addImage(image);
try {
mediaTracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
之后,您可以调用
image.getHeight()
在后台运行createImage来加载图像
使用MediaTracker等待加载,然后使用getHeight(并使用有效的ImageObserver防止错误)的可能副本-取决于是否需要使用AWT Image类。@berry120-我想说的是Java不希望看到太长时间的图像是一个问题。。。
MediaTracker mediaTracker = new MediaTracker(component);
mediaTracker.addImage(image);
try {
mediaTracker.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}