getScaledInstance java Image之后的高度和宽度-1

时间:2014-01-23 22:12:08

标签: java image awt

所以对于wanky冠军。没想出一个简短的怀孕描述。

我的问题是这些代码行:

ii = new ImageIcon("images/player.png");
image = ii.getImage();
image = image.getScaledInstance(SCALED_X, SCLAED_Y, Image.SCALE_SMOOTH);
positionX = windowWidth / 2 - image.getWidth() / 2; 
positionY = windowHeight - image.getHeight();

当我调试代码时,我注意到在调用getScaledInstance函数之后图像的高度和宽度为-1,因此最后两行返回错误的结果。我想出的解决方法是使用SCALED_X和SCALED_Y作为新的高度和宽度但不是那么漂亮 - .- 任何人都可以解释为什么这样,即高度和宽度的值为-1?使用getScaledInstance函数时这些属性是否丢失(在文档中找不到任何关于该属性的文字)?有没有办法再次将它们添加到Image中?

有没有办法减小图像的大小并保持分别。自动调整属性?

编辑:

更改了代码以获取图片:

try {
    image = ImageIO.read(new File("images/player.png")).getScaledInstance(SCALED_X, SCLAED_Y, Image.SCALE_SMOOTH);          
} catch (IOException e) {
    e.printStackTrace();
}

-1的错误仍然存​​在:(

1 个答案:

答案 0 :(得分:0)

读取所用方法的Javadocs表示当您调用getHeight / getWidth时图像尚未缩放:

  

getScaledInstance():

     
    

创建此图像的缩放版本。将返回一个新的Image对象,默认情况下将以指定的宽度和高度呈现图像。即使原始源图像已经完全加载,新的Image对象也可以异步加载

  
     

的getHeight():

     
    

确定图像的高度。 如果尚未知道高度,则此方法返回-1

  

您有几个选项:您可以等待图像缩放,或者在宽度和高度可用时使用ImageObserver计算所需的值,或使用SCALED_X/Y常量而不是image.getWidth /高度,或通过创建新的BufferedImage并将旧图像绘制到新图像上来自己缩放图像。

另一种可能性是简单地假设玩家图像的大小正确 - 这将使你的游戏加载更快,并且玩家将在游戏中完全按照艺术家绘制的方式出现。