如何将 libGDX 的纹理转换为字节数组并在 Java 中再次转换回来
How to convert libGDX's Texture to byte array and back again in Java
所以我正在使用 libgdx 和 java 开发一款小型多人游戏。我正在使用数据报套接字和数据报包在客户端之间发送消息。为了发送数据,我需要将其转换为字节数组。我一直在寻找一种将 libgdx 纹理转换为字节数组的方法,但找不到解决方案。我无法使 class 实现可序列化,因为我无权访问 class。
如果能帮助解决我的问题,我将不胜感激。提前致谢!
您可以使用 中的以下代码片段将 Texture
转换为像素图:
Texture texture = textureRegion.getTexture();
if (!texture.getTextureData().isPrepared()) {
texture.getTextureData().prepare();
}
Pixmap pixmap = texture.getTextureData().consumePixmap();
获得 Pixmap
后,您可以调用 getPixels()
方法,该方法将 return 包含像素数据的字节数组 ByteBuffer
。您可以通过调用 ByteBuffer
上的 get(byte[]) 方法将原始数据读入 byte[]
:
ByteBuffer byteBuffer = pixmap.getPixels();
byte[] pixelDataByteArray = new byte[byteBuffer.remaining()];
byteBuffer.get(pixelDataByteArray);
要将 byte[]
转换回 Texture
,您可以像这样使用 Pixmap
和 Texture
的构造函数:
Texture fromByteArray = new Texture(new Pixmap(pixelDataByteArray, 0, pixelDataByteArray.length));
所以我正在使用 libgdx 和 java 开发一款小型多人游戏。我正在使用数据报套接字和数据报包在客户端之间发送消息。为了发送数据,我需要将其转换为字节数组。我一直在寻找一种将 libgdx 纹理转换为字节数组的方法,但找不到解决方案。我无法使 class 实现可序列化,因为我无权访问 class。
如果能帮助解决我的问题,我将不胜感激。提前致谢!
您可以使用 Texture
转换为像素图:
Texture texture = textureRegion.getTexture();
if (!texture.getTextureData().isPrepared()) {
texture.getTextureData().prepare();
}
Pixmap pixmap = texture.getTextureData().consumePixmap();
获得 Pixmap
后,您可以调用 getPixels()
方法,该方法将 return 包含像素数据的字节数组 ByteBuffer
。您可以通过调用 ByteBuffer
上的 get(byte[]) 方法将原始数据读入 byte[]
:
ByteBuffer byteBuffer = pixmap.getPixels();
byte[] pixelDataByteArray = new byte[byteBuffer.remaining()];
byteBuffer.get(pixelDataByteArray);
要将 byte[]
转换回 Texture
,您可以像这样使用 Pixmap
和 Texture
的构造函数:
Texture fromByteArray = new Texture(new Pixmap(pixelDataByteArray, 0, pixelDataByteArray.length));