【发布时间】:2015-12-28 03:52:37
【问题描述】:
我想上传一个内部 png 图像到我的后端,后端提供的 API 只允许上传 byte[] 数据。
但到目前为止,我还没有找到从纹理中提取字节[] 数据的方法。如果它是内部资源,我不确定是否重要?
那么有什么方法可以使用 Libgdx 框架来实现呢? 我要使用的图像是通过 AssetManager 加载的。
【问题讨论】:
我想上传一个内部 png 图像到我的后端,后端提供的 API 只允许上传 byte[] 数据。
但到目前为止,我还没有找到从纹理中提取字节[] 数据的方法。如果它是内部资源,我不确定是否重要?
那么有什么方法可以使用 Libgdx 框架来实现呢? 我要使用的图像是通过 AssetManager 加载的。
【问题讨论】:
在尝试执行此操作之前,请确保了解以下内容:
Texture 是驻留在视频内存 (VRAM) 中的 OpenGL 资源。纹理数据本身(不一定)在 RAM 中可用。所以你不能直接访问它。将该数据从 VRAM 传输到 RAM 相当于截取屏幕截图。一般来说,这是你想要避免的。
但是,如果您使用AssetManager 加载图像,那么您是从文件加载图像,因此数据已经在 RAM 中可用。在这种情况下,它不称为Texture,而是称为Pixmap。从像素图中获取数据是这样的:
Pixmap pixmap = new Pixmap(Gdx.files.internal(filename));
ByteBuffer nativeData = pixmap.getPixels();
byte[] managedData = new byte[nativeData.remaining()];
nativeData.get(managedData);
pixmap.dispose();
请注意,您也可以使用AssetManager 加载Pixmap(在这种情况下,您将使用unload 而不是dispose 它)。 nativeData 包含原始内存,大多数 API 也可以使用它,因此请检查您是否可以直接使用它。否则,您可以使用managedData 托管字节数组。
【讨论】: