【问题标题】:Can`t load an simple image. Libgdx无法加载简单的图像。 Libgdx
【发布时间】:2015-06-23 11:48:57
【问题描述】:

我正在使用 LibGDX 制作启动画面(用于我的游戏)。 我正在使用 .png 格式的图像,其中很少 - 它可以工作(我的图像正确位于资产文件夹中) 我想使用的图片很少出现此错误:

    Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: devlogo.png
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
    at com.badlogic.gdx.graphics.TextureData$Factory.loadFromFile(TextureData.java:98)
    at com.badlogic.gdx.graphics.GLTexture.createTextureData(GLTexture.java:185)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:103)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:95)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:91)
    at com.GunRun.Screens.Splash.show(Splash.java:34)
    at com.badlogic.gdx.Game.setScreen(Game.java:61)
    at com.mynewgame.game.GunRun.create(GunRun.java:16)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: java.io.IOException: Error loading pixmap: decoder init failed for stream
    at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138)
    ... 10 more

闪屏类的代码:

public class Splash implements Screen{

private Sprite devlogo;
private SpriteBatch batch;

@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.begin();
    devlogo.draw(batch);
    batch.end();
}

@Override
public void resize(int width, int height) {

}

@Override
public void show() {
    batch = new SpriteBatch();

    Texture texture = new Texture("devlogo.png");
    devlogo = new Sprite(texture);
    devlogo.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}



@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void hide() {

}

@Override
public void dispose() {

}

}

工作的图像有 24 位深度,而其他没有 64 位深度的图像有问题吗?

【问题讨论】:

  • 64 位 png 非常罕见。如果操作系统无法加载它,我不会感到惊讶。没有典型的计算机或移动屏幕甚至可以显示 48 位颜色,而且 OpenGL ES 最多只支持每个通道 8 位,而不是 16 位。
  • @Tenfour04 谢谢你,我只是弄清楚问题出在哪里-它的位深度(我不太了解它是什么)。我通过 Photoshop 将其更改为 8 位深度,而且字数很好!

标签: java libgdx pixmap


【解决方案1】:

就我而言,我必须将图像保存为 8 位/通道而不是 16 位/通道。

【讨论】:

    【解决方案2】:

    我最近也遇到了这个问题,所以我深入研究了该错误消息的来源。错误来自 jpgd.cpp 中的this line

    jpeg_decoder decoder(pStream);
    if (decoder.get_error_code() != JPGD_SUCCESS) {
        err_reason = "decoder init failed for stream";
        return NULL;
    }
    

    有趣的是,由于这些是 PNG,因此很怀疑它试图将图像加载为 JPG。事实证明,如果 LibGDX 在第一次尝试时无法将图像加载到内存中,here 会发生这种情况:

    const unsigned char* pixels = stbi_load_from_memory(buffer, len, &width, &height, &format, 0);
    if (pixels == NULL) {
        pixels = jpgd_decompress_jpeg_image_from_memory(buffer, len, &width, &height, &format, 3);
    }
    

    结果是我遇到了这个问题,因为我的部分游戏存在大量内存泄漏,所以 LibGDX 只是未能分配内存来加载图像。修复内存泄漏为我解决了问题。

    由于这发生在您的初始屏幕上,我猜内存泄漏不是您的问题的原因,但可能值得检查您是否为应用程序分配了足够的内存。

    【讨论】:

      【解决方案3】:

      简单,用任何照片编辑器更改 RGB 配置文件(我用的是 Photoshop)。

      当你去保存图像时,只需排除之前的 RGB 配置文件。

      【讨论】:

        猜你喜欢
        • 2012-12-19
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        相关资源
        最近更新 更多