Java 在libgdx中高效加载图像

Java 在libgdx中高效加载图像,java,android,libgdx,Java,Android,Libgdx,我想加载一个大字节[]的颜色。在opengl中,我想把它画成视频(用于splashscreen)。 现在,我像GIF一样加载每个像素贴图,但它占用了太多内存(RAM)。(我是在Android平台上用libgdx做的) 公共图像序列(int-width、int-height、byte[][]pixmap){ 这个。宽度=宽度; 高度=高度; this.frameCount=pixmaps.length; this.data=new Pixmap[frameCount]; 对于(int i=0;i

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

公共图像序列(int-width、int-height、byte[][]pixmap){
这个。宽度=宽度;
高度=高度;
this.frameCount=pixmaps.length;
this.data=new Pixmap[frameCount];
对于(int i=0;i

inti=574+1;//574
字节[][]dats=新字节[I][];
内部宽度=1400;
整数高度=720;
for(int i=0;i
使用视频播放器方法看起来更有效。有解决办法吗

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

编辑:500+图像和1280x720像素或更高


很抱歉英语不好,谢谢。

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

您必须在使用资产之前加载它

this.assetManager.load(“您的内部路径”,Texture.class);
assetManager.finishLoading()//可选,但他只是等待资产加载结束
然后你就可以拿到你的资产了

可以在启动应用程序或屏幕之前异步加载资产

您可以在中查看有关它的更多信息

另外,我认为你应该使用纹理而不是像素贴图

更改ImageSequence构造函数

公共图像序列(整数宽度、整数高度、列表纹理){
....
}
之后,imageSequence只需更改当前纹理即可制作动画

纹理类将直接为您处理位。并且纹理对象可以直接由assetManager创建

Teture texture=assetManager.get(“您的内部路径”,texture.class);

对不起,我忘了提到高达500+,1280x720像素的图像数量。我会将资源从图像更改为视频,但我还不知道如何在opengl/libgdx中编码。难怪您会遇到RAM大小问题。您可以试试谁是libgdx子库()谢谢。我只是想创建一个只包含宽度、高度、帧和颜色数据的自定义文件。然后读入动画。也许,视频质量更高。请参见TextureRegion谁可以选择纹理使用一系列纹理播放如此大小的动画是不可行的。它将占用1.5 GB的内存!您需要使用视频来利用视频压缩。
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);