首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法加载简单的图像。Libgdx

无法加载简单的图像。Libgdx
EN

Stack Overflow用户
提问于 2015-04-17 04:34:29
回答 3查看 2.4K关注 0票数 1

我正在用LibGDX制作一个闪屏(用于我的游戏)。我使用的是.png格式的图片,而且只有很少的图片可以正常工作(我的图片恰好位于assets文件夹中),我想要使用的图片很少,但我收到了这个错误:

代码语言:javascript
运行
复制
    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

来自闪屏类的代码:

代码语言:javascript
运行
复制
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位深度的图像,会有问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-24 09:49:34

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

代码语言:javascript
运行
复制
jpeg_decoder decoder(pStream);
if (decoder.get_error_code() != JPGD_SUCCESS) {
    err_reason = "decoder init failed for stream";
    return NULL;
}

有趣的是,由于这些是PNG,所以很可能是它试图将图像加载为JPG。事实证明,如果LibGDX在第一次尝试时无法将图像加载到内存中,就会发生here

代码语言:javascript
运行
复制
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根本无法分配内存来加载图像。修复内存泄漏为我解决了这个问题。

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

票数 1
EN

Stack Overflow用户

发布于 2018-10-26 03:36:39

在我的例子中,我必须保存图像8位/通道,而不是16位/通道。

票数 2
EN

Stack Overflow用户

发布于 2017-03-17 02:22:12

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

当您要保存图像时,只需排除以前的RGB配置文件即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29685437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档