来自Windows上Graphics2D的drawImage的IllegalArgumentException

时间:2014-06-04 21:39:04

标签: java graphics

我在Windows上遇到以下错误(但不是在OSX上):

Exception in thread "Engine" java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
    at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
    at java.awt.image.BufferedImage.<init>(Unknown Source)
    at sun.java2d.pipe.DrawImage.renderImageXform(Unknown Source)
    at sun.java2d.d3d.D3DDrawImage.renderImageXform(Unknown Source)
    at sun.java2d.pipe.DrawImage.transformImage(Unknown Source)
    at sun.java2d.pipe.DrawImage.scaleImage(Unknown Source)
    at sun.java2d.pipe.DrawImage.scaleImage(Unknown Source)
    at sun.java2d.pipe.ValidatePipe.scaleImage(Unknown Source)
    at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
    at sun.java2d.SunGraphics2D.drawImage(Unknown Source)
    at simpleEngine.graphics.GameGraphics.drawGameObject(GameGraphics.java:27)

使用以下代码:

public void drawGameObject(GameObject obj, BufferedImage image) {
    graphics2d.rotate(obj.getRotation(), obj.getX() + obj.getWidth()/2, obj.getY() + obj.getHeight()/2);
    graphics2d.drawImage(image, (int) obj.getX(), (int) obj.getY(), (int) obj.getWidth(), (int) obj.getHeight(), null);
    graphics2d.rotate(-obj.getRotation(), obj.getX() + obj.getWidth()/2, obj.getY() + obj.getHeight()/2);
}

GameObject是一个在空间中表示的对象。它具有字段位置(双x和y),大小(双倍宽度和高度)和旋转(两倍的rad)以及上述字段的getter和setter。

我不明白的是零高度和宽度的来源。在这种情况下,obj的宽度和高度为30,图像的宽度和高度为535。

任何和所有帮助将不胜感激!

提前致谢!

编辑: 启动类时提供对Graphics2D对象的引用。这个方法来自的类是Graphics2D的包装器,其方法简化了我的项目中的工作。当我检索Graphics2D时,我将它包装在这个类中并传递它。 (感谢MadProgrammer指出缺少信息!)

我发现如果从drawGameObject中删除了旋转代码,问题就解决了。它不会获得现金,但没有旋转的精灵。

我发现旋转是NaN并导致了问题。仍然不知道为什么它不会在OS X上抱怨..

2 个答案:

答案 0 :(得分:0)

我发现旋转是一个NaN,并在用它旋转图形时导致问题。仍然不知道为什么它没有抱怨OS X虽然..

答案 1 :(得分:0)

如果你真的像你所写的那样使用你的陈述,那么错误就在最后一行:

graphics2d.rotate(obj.getRotation(), obj.getX() + obj.getWidth()/2, obj.getY() + obj.getHeight()/2);

您已撰写-obj.getRotation()