在 libgdx 中有效地加载图像

load images efficiently in libgdx

我想加载一个大字节[] 的颜色。在 opengl 中,我想像视频一样绘制它(用于启动画面)。 现在,我像 GIF 一样加载每个像素图,但它占用太多内存 (RAM)。 (我是在 Android 平台上用 libgdx 做的)。

public ImageSequences(int width, int height, byte[][] pixmaps) {
    this.width = width;
    this.height = height;
    this.frameCount = pixmaps.length;
    this.data = new Pixmap[frameCount];
    for (int i = 0; i < frameCount; i++) {
        this.data[i] = new Pixmap(width, height, mainFormat);
        Pixmap p = new Pixmap(pixmaps[i], 0, pixmaps[i].length);
        this.data[i].drawPixmap(p, 0, 0, p.getWidth(), p.getHeight(), 0, 0, width, height);
        p.dispose();
    }
    this.base = new Texture(width, height, mainFormat);
}

int lastIndx = -1;
public Texture getKey(float timeState) {
    int i = Math.round(timeState * 60) % frameCount;
    if (lastIndx == i)
        return base;
    lastIndx = i;
    base.draw(data[i], 0, 0);
    return base;
}

        int I = 574 + 1;// 574
        byte[][] dats = new byte[I][];
        int width = 1400;
        int height = 720;
        for (int i = 0; i < I; i++) {
            dats[i] = Gdx.files.internal(String.format("seq/anim_%05d.jpg", i)).readBytes();
        }
        anim = new ImageSequences(width, height, dats);

使用视频播放器方法看起来效率更高。有什么解决办法吗?

我希望,它可以在多平台上完成并且不需要额外的库。

编辑:有 500 多张图片和 1280x720 像素或更高。

抱歉英语不好,谢谢。

您应该尝试使用 AssetManager。 AssetManager 将为您处理资产(示例多次使用)。

您必须在使用前加载您的资产。

this.assetManager.load("Your internal Path", Texture.class);

assetManager.finishLoading();//optional but he just wait the end of assetLoading 

然后你就可以得到你的资产了。

资产的加载可以在应用程序或屏幕启动时提前异步完成。

您可以在 libGdx gitHub wiki

中查看更多相关信息

另外我认为你应该使用 Texture 而不是 PixMap

更改 ImageSequence 构造函数

public ImageSequences(int width, int height, List<Texture> textures) {
 ....
}

之后 imageSequence 只需更改当前纹理即可制作动画。

纹理class 将直接为您处理位。而Texture Object可以直接由assetManager创建

Teture texture = assetManager.get("Your internal Path", Texture.class);