如何在C#中将字节数组读取为多维数组?

时间:2019-03-23 08:58:49

标签: c# python sockets unity3d textures

我正在尝试使用Python将图像发送到Unity C#,在此我想显示覆盖在当前显示器上的图像(每一帧)。 我目前正在使用zmq从python到Unity接收PNG图像的字节数组。 该图像采用numpy数组的形式,形状为256x256x4。使用函数np.tobytes,消息的长度为2097152,大于(256x256x4)

一旦消息发送到Unity,我正尝试使用以下代码段从字节数组中获取颜色数组以使用Texture2D.readPixels32()

var colorArray = new Color32[message.Length/4];
for(var i = 0; i < message.Length; i+=4)
{
    var color = new Color32(message[i + 0], message[i + 1], message[i + 2], message[i + 3]);
    colorArray[i/4] = color;
}
Texture2D tex2new=new Texture2D(Screen.width,Screen.height);
print (Screen.height + " " + Screen.width + " " + colorArray.Length);
tex2new.SetPixels32(colorArray);

调用了错误SetPixels32,数组中的像素数无效 UnityEngine.Texture2D:SetPixels32(Color32[]) 如何将字节数组读入纹理? 在Unity中实时玩游戏后,是否有更好的方式显示字节数组?

1 个答案:

答案 0 :(得分:0)

以下对我有用:

Texture2D tex = new Texture2D(Screen.width/2, Screen.height,TextureFormat.RGBA32,false);
byte[] message = null;
bool gotMessage = false;
while (true)
{
    gotMessage = client.TryReceiveFrameBytes(out message); // this returns true if it's successful
    if (gotMessage) break;
}


tex.LoadImage(message);
byte[] mesg1 = tex.EncodeToPNG();
dest = cam2.targetTexture;
Graphics.Blit(tex, dest);
RenderTexture.active = dest;