gpt4 book ai didi

java.awt.Image getWidth 和 getHeight 方法不能正常工作?

转载 作者:行者123 更新时间:2023-11-30 04:25:52 25 4
gpt4 key购买 nike

我正在尝试显示恰好是 Image 类 ( http://docs.oracle.com/javase/7/docs/api/java/awt/Image.html ) 实例的图像。我需要一个 BufferedImage,并且我找到了一段非常适合此目的的代码(使用 Graphics)。但是,要创建 BufferedImage,我需要知道图像的宽度和高度。 Image 类确实有 getWidth 和 getHeight 方法,但它们似乎并不总是正常工作。使用调试我发现有时宽度和高度设置为-1。我还发现,实际调用 getWidth 和 getHeight 方法会“更新”宽度和高度值,因此之后高度和宽度具有正确的值。因此,我在“真正”调用 getWidth 和 getHeight 之前添加了一个假“image.getWidth(null)”,并获得了正确的值。当我在 Debug模式下逐步执行时,效果很好,但当我正常运行时,它就不再工作了。我添加了一个“Thread.sleep(5);”在“假” getWidth 调用之后,它就起作用了。

这种行为很奇怪,也许有人会有一个解释和/或一种方法让它在没有 sleep 技巧的情况下工作?

编辑:这就是图像的加载方式:

URL url = "path/to/img";
Image img = Toolkit.getDefaultToolkit().getImage(url);

我拥有对此代码的只读访问权限,这就是为什么我想从那里开始获取我的 BufferedImage。

我添加的内容是

image.getWidth(null); // "Fake" call to force the image to update his width&height
try {
Thread.sleep(5);
} catch...
if(image.getWidth(null) != -1 && image.getHeight(null) != -1) {
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics bg = bi.getGraphics();
bg.drawImage(image, 0, 0 null);
bg.dispose();
}

如果我删除 sleep ,似乎 getWidth“没有时间”完成,并且某些图像的宽度/高度= -1。一些用于计算维度的方法可能是异步的。我知道 ImageIO.read() 是一种更简单、更有效的方法,但我仍然想找到一种解决方法来完成这项工作:)

如果不可能的话我会找到其他方法,其实没什么大不了的。

最佳答案

可能图像尚未完全加载。尝试添加 MediaTracker ,将图像添加到跟踪器并等待图像完全加载(使用 waitForAllwaitForID)。

关于java.awt.Image getWidth 和 getHeight 方法不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15874379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com