LibGDX 无法加载特定图像。

7
我过去已成功加载所有图片,并且我正在使用OpenGL ES 2.0,所以这些图片不需要是2的幂次方(我已经成功加载了几张不符合这个条件的图片)。
涉及到的代码如下:
Line 96: splashSheet = new Texture(Gdx.files.internal("test.png"));

这是我的错误信息:
    Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
    at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
    at com.badlogic.gdx.graphics.Texture.load(Texture.java:175)
    at com.badlogic.gdx.graphics.Texture.create(Texture.java:159)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:122)
    at com.panini.game.GameScreen.show(GameScreen.java:96)
    at com.badlogic.gdx.Game.setScreen(Game.java:59)
    at com.panini.game.Splash.render(Splash.java:29)
    at com.badlogic.gdx.Game.render(Game.java:46)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:190)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)
Caused by: java.io.IOException: couldn't load pixmap
    at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138)
    ... 11 more

这是一个有趣的问题。我可以加载这个文件,但却无法加载这个。前者基本上只是我想要使用的截取屏幕截图。 我提供的第二个图像(不起作用)是原始图像。它被称为splashSprites.png,但我已经尝试将其重命名为test.png并正确引用它,但仍然不起作用,所以我知道绝对不是命名问题或其他任何问题。 如果我将两个文件命名为test1.png和test2.png并放置在assets或bin目录中,则如果我要求加载test1.png,则代码有效,但如果我要求加载test2.png,则不起作用,因此也不是我放置文件的位置错误。这两个似乎是最有可能的候选者,但我已经排除了它们。 我尝试了其他事情,比如重新导出第一个图像之类的事情,但从来没有成功过(能够工作的是拍摄屏幕截图,这就是我来到这里的原因)。 我猜想这可能与其中一个图像的alpha有关(因为这是两个唯一不同的地方-一个有alpha,另一个没有),但这不太可能,因为我能够加载一些有alpha的其他纹理。我真的很困惑。提前谢谢。
2个回答

7

我找到了答案。显然,LibGDX不支持16位的png文件(这是正确的吗?)因为在使用OS X上的预览将我的精灵动画表转换为8位深度后,我发现问题消失了。

感谢P.T.建议升级LibGDX,因为这就是我得到下面错误消息的原因:

Caused by: java.io.IOException: couldn't load pixmap 8bit only

我的观点是:使用ImageMagick时,将“png8:name.png”作为输出文件名以强制转换为8位格式。 - njzk2

4

使用pngcrush将图片转换为更常见的PNG格式。

这个截图是使用libGDX论坛的截图代码生成的吗?我也用过它,但是生成的PNG文件很大,而且我还遇到了一些加载/编辑问题。无论如何,pngcrush解决了我的问题。

pngcheck工具可能能够分离出你所拥有的两张图片之间的不同之处。

通过查看libGDX源码,我发现最近(11天前)对libGDX图像加载器进行了更改:https://github.com/libgdx/libgdx/commit/4fac29aef94e3afafdd47d71e60faf256fa171b0 (看起来IOException应该包含更多关于实际错误的信息),所以您可以尝试使用libGDX夜间版本运行?


谢谢。我尝试了pngcrush,但它没有起作用。不过Preview可以(默认导出为16位,所以您需要手动更改),但我认为ImageMagick也能够做到这一点。它的identify工具还允许我查看图像是8位还是16位。 - Panini Raman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接