【问题标题】:How to convert libGDX's Texture to byte array and back again in Java如何在 Java 中将 libGDX 的纹理转换为字节数组并再次返回
【发布时间】:2021-03-28 17:24:27
【问题描述】:

所以我正在开发一个使用 libgdx 和 java 的小型多人游戏。我正在使用数据报套接字和数据报包在客户端之间发送消息。为了发送数据,我需要将其转换为字节数组。我一直在寻找一种将 libgdx 纹理转换为字节数组的方法,但找不到解决方案。我无法让该类实现 Serializable,因为我无权访问该类。

我将不胜感激任何帮助解决我的问题。提前致谢!

【问题讨论】:

  • 如果您不能直接从纹理中读取它,请尝试将纹理转换为 Pixmap 并从那里读取。

标签: java networking serialization libgdx deserialization


【解决方案1】:

您可以使用来自this answer 的以下 sn-p 将您的 Texture 转换为像素图:

Texture texture = textureRegion.getTexture();
if (!texture.getTextureData().isPrepared()) {
    texture.getTextureData().prepare();
}
Pixmap pixmap = texture.getTextureData().consumePixmap();

当您获得Pixmap 后,您可以调用getPixels() 方法,该方法将返回一个ByteBuffer,其中包括像素数据的字节数组。您可以通过在ByteBuffer 上调用get(byte[]) 方法将原始数据读入byte[]

ByteBuffer byteBuffer = pixmap.getPixels();
byte[] pixelDataByteArray = new byte[byteBuffer.remaining()];
byteBuffer.get(pixelDataByteArray);

要将byte[] 转换回Texture,您可以像这样使用PixmapTexture 的构造函数:

Texture fromByteArray = new Texture(new Pixmap(pixelDataByteArray, 0, pixelDataByteArray.length));

【讨论】:

  • 当我调用 byteBuffer.array() java 时会抛出不支持的操作异常。我应该使用某个版本的 java 吗?
  • ByteBuffer 是 Java 中的一个抽象类。这意味着它可以有多种实现,而且似乎Pixmap 使用了一个不支持array() 方法的实现。但除了使用array() 方法,您还可以使用get(byte[]) 方法将字节读取到数组中,如this answer 中所述。我相应地编辑了答案。
猜你喜欢
  • 2011-06-23
  • 2015-09-02
  • 2010-11-28
  • 1970-01-01
  • 2011-08-03
  • 2013-10-14
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多