2013-01-05 43 views
7

我已经在过去成功加载了所有图像,并且我使用的是OpenGL ES 2.0,所以图像不需要是两个幂(我有几个加载成功都没有)。LibGDX无法加载特定图像

有问题的代码是这样的:

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 

这里是什么使这一个有趣的问题。我可以加载this文件,但我无法加载this之一。前者基本上只是我想使用的截图。 我提供的第二张图片(不起作用)是原图。它被称为splashSprites.png,但我尝试将它重命名为test.png并正确引用它,但它仍然不起作用,所以我知道它绝对不是一个命名问题或任何其他问题。如果我将两个文件分别放在名为test1.png和test2.png的资产或bin目录中,那么代码将工作,如果我要求加载test1.png,而不是我要求加载test2.png,那么这不是我'把文件放在错误的地方。这两人似乎是最有可能的候选人,但我排除了他们。

我试过其他的东西,如重新导出第一张图片等,但它从来没有工作(什么工作是采取截图,这就是为什么我在这里)。我的猜测是,它可能与某个图像中的alpha有关(因为这实际上是唯一不同于这两个图像的图像 - 一个是alpha,另一个不是)但这不太可能,因为我可以加载其他图像纹理确实有alpha。我真的很难过。

在此先感谢。

回答

7

我找到了答案。显然LibGDX不支持16位PNG(是吗?),因为在使用OS X预览版将我的spritesheet转换为8位深度后,我发现问题消失了。

感谢P.T.对于升级LibGDX的建议,因为这是我如何得到以下错误信息:

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

我的2便士:与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夜莺?

+0

谢谢。我试过pngcrush,但没有奏效。预览没有,但(它默认导出为16位,所以你必须手动改变),但我认为ImageMagick也可以。它的识别工具还允许我查看图像是8位还是16位。 –