我想将一个内部png图像上传到我的后端,后端提供的API只允许上传byte []数据.
但到目前为止,我还没有找到一种从纹理中提取byte []数据的方法.如果它是内部资源,我不确定是否重要?
那么有什么方法可以使用Libgdx框架实现这一目标?我想要使用的图像是使用AssetManager加载的.
在尝试执行此操作之前,请确保了解以下内容:
A 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();
Run Code Online (Sandbox Code Playgroud)
请注意,您也可以加载Pixmap使用AssetManager(在这种情况下,您将unload代替dispose它).该nativeData包含原始记忆,大多数的API可以使用也,故请检查您是否可以直接使用.否则,您可以使用managedData托管字节数组.
| 归档时间: |
|
| 查看次数: |
582 次 |
| 最近记录: |