`using NetMQ;
using NetMQ.Sockets;
using Godot;
using System;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Linq;
using System.Threading.Tasks;
public partial class Camera : TextureRect
{
SubscriberSocket subscriberSocket;
Image cameraImage = new Image();
public override void _Ready()
{
subscriberSocket = new SubscriberSocket();
subscriberSocket.Connect("tcp://192.168.31.119:13550");
subscriberSocket.Subscribe("CAMERA");
GD.Print("Camera Connected");
}
private async Task ProcessImage(byte[] message)
{
await Task.Yield(); // 异步处理图像数据
if (message.Length > 0)
{
// Save image to file for testing
// System.IO.File.WriteAllBytes("received.png", message);
System.IO.File.WriteAllBytes("received.jpg", message);
// System.IO.File.WriteAllBytes("received.webp", message);
// Error error = cameraImage.LoadPngFromBuffer(message);
Error error = cameraImage.LoadJpgFromBuffer(message);
// Error error = cameraImage.LoadWebpFromBuffer(message);
if (error == Error.Ok)
{
Texture = ImageTexture.CreateFromImage(cameraImage);
}
else
{
GD.Print("Failed to load image from buffer: " + error.ToString());
GD.Print("Error code: " + (int)error);
GD.Print("Message data: " + BitConverter.ToString(message.Take(50).ToArray())); // Print the first 50 bytes
}
}
else
{
GD.Print("Received empty message");
}
}
public override void _Process(double delta)
{
if (subscriberSocket.TryReceiveFrameString(out string topic) &&
subscriberSocket.TryReceiveFrameBytes(out byte[] message))
{
GD.Print("Received message size: " + message.Length);
ProcessImage(message);
}
}
}
`
i can open received.jpg on vscode but godot cant read ….

move received.jpg to unity3d also readable.