unity3d 在Unity中从字节数据加载原始图像

kzmpq1sx  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(295)

我正在Unity中通过UDP连接接收字节数据,我想在Unity中将字节数据渲染为rawImage。如果我尝试从本地磁盘加载图像,我可以渲染图像。
在下面的代码中,如果我在从本地磁盘阅读数据的地方运行未注解的代码,我就能够渲染图像。
如果我使用Udp客户端运行代码,我无法呈现图像。我已经检查了通过将其转换为字符串接收到的字节数据,我能够看到数据。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Text;
using System.Net;
using System.Net.Sockets;

public class Image : MonoBehaviour  
{
    // Start is called before the first frame update
    public RawImage image;
    UdpClient client;
    private RenderTexture renderTexture;
    float interval = 0.05f;
    float nextTime = 0;
    private int count;
    void Start()
    {
        count = 0;
        client = new UdpClient(8000);

    }

 
    //Update is called once per frame
    void Update()
    {

        //if (Time.time >= nextTime)
        //{
        //    Texture2D texture = new Texture2D(2, 2);
        //    string path = "C:/Users/Desktop/frames20/frame_" + count.ToString() + ".jpg";
        //    byte[] imageData = File.ReadAllBytes(path);
        //    texture.LoadImage(imageData);
        //    image.texture = texture;
        //    Debug.Log(path);
        //    //Destroy(texture);
        //    nextTime += interval;
        //    count += 1;
        //}

        if (client.Available > 0)
        {
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
            byte[] data = client.Receive(ref endPoint);
            string text = Encoding.UTF8.GetString(data);
            Debug.Log(text);
            if (data != null)
            {
                Texture2D texture = new Texture2D(2, 2);
                texture.LoadImage(data);
                image.texture = texture;
            }
        }

    }
}
lmvvr0a8

lmvvr0a81#

检查您要显示的数据的长度。可能不是整个图像,而只是每帧中完整数据的不同部分。您可以通过将Debug.Log添加到if(data != null)部分来轻松检查。
还有,UDP似乎不是发送这类数据的一个很好的选择。为什么要使用它?

相关问题