我正在尝试使用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中实时玩游戏后,是否有更好的方式显示字节数组?
答案 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;