从Libgdx纹理中提取byte []

时间:2015-12-27 16:06:36

标签: android libgdx

我想将内部png图像上传到我的后端,后端提供的API只允许上传byte []数据。

但到目前为止,我还没有找到一种从纹理中提取byte []数据的方法。如果它是内部资源,我不确定是什么问题?

那么使用Libgdx框架有什么方法可以实现这一目标? 我想要使​​用的图像是使用AssetManager加载的。

1 个答案:

答案 0 :(得分:5)

在尝试执行此操作之前,请务必了解以下内容:

Texture是一个驻留在视频内存(VRAM)中的OpenGL资源。纹理数据本身不一定在RAM中可用。所以你不能直接访问它。将数据从VRAM传输到RAM与截取屏幕截图相当。一般来说,这是你想要避免的事情。

但是,如果使用AssetManager加载图像,则从文件加载图像,因此已经在RAM中提供了数据。在这种情况下,它不是Texture而是Pixmap。从pixmap获取数据是这样的:

Pixmap pixmap = new Pixmap(Gdx.files.internal(filename));
ByteBuffer nativeData = pixmap.getPixels();
byte[] managedData = new byte[nativeData.remaining()];
nativeData.get(managedData);
pixmap.dispose();

请注意,您也可以使用Pixmap加载AssetManager(在这种情况下,您unload而不是disposenativeData包含原始内存,大多数API也可以使用它,因此请检查您是否可以直接使用它。否则,您可以使用managedData托管字节数组。