android - 从 Libgdx 纹理中提取 byte[]

标签 android libgdx

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

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

那么使用 Libgdx 框架有哪些方法可以实现这一点呢? 我想要使​​用的图像是通过 AssetManager 加载的。

最佳答案

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

纹理是驻留在视频内存 (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 托管字节数组。

关于android - 从 Libgdx 纹理中提取 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34482186/

相关文章:

java - Libgdx 球赛

java - 如何使 LibGDX 桌面默认全屏

android - Android应用程序开发中如何使用加速度计测量距离

android-actionbar - 动态更改 homeAsUpIndicator

Android 设备选择器显示我的设备,但我的应用程序无法在我的手机上启动! :(

java - 如何与 Sprite 一起旋转 vector ?

Android 只有在 RecycleView/List 大于屏幕时才设置 StackFromEnd

Android将箭头图像添加到微调器

java - (初学者)在 libGDX 中使用事件发送信息

java - 如何简化多个IF语句?