C# 通过网络发送图像后无法反序列化图像

C# 通过网络发送图像后无法反序列化图像,c#,image,deserialization,C#,Image,Deserialization,因此,我有两种方法,用于序列化和反序列化图像: private static Image GetImageFromString(string image) { using (var stream = new MemoryStream(Convert.FromBase64String(image))) { return Image.FromStream(stream); }

因此,我有两种方法,用于序列化和反序列化图像:

private static Image GetImageFromString(string image)
        {
            using (var stream = new MemoryStream(Convert.FromBase64String(image)))
            {
                return Image.FromStream(stream);
            }
        }

private static string GetImageAsString(Image image)
        {
            using (var stream = new MemoryStream())
            {
                image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);

                return Convert.ToBase64String(stream.GetBuffer());
            }
        }
如果我这样做:

public Form1()
        {
            InitializeComponent();

            var image = Image.FromFile(@"F:\phpide.png");

            pictureBox1.Image = image;

            var serialized = GetImageAsString(image);

            var secondImage = GetImageFromString(serialized);

            pictureBox2.Image = secondImage;
        }
它按预期工作

但是,如果我做了这样的事情:

//client
    public void GetImage(JObject o)
            {
                var imageFile = o["file"].ToString();

                if (!File.Exists(imageFile))
                {
                    SendMessage("File does not exist");
                    return;
                }

                using (var image = Image.FromFile(imageFile))
                {
                    var serialized = GetImageAsString(image);

                    var ob = new JObject
                        {
                            { COMMAND, (int) Command.GetImage },
                            { "content", serialized }
                        };

                    Send(ob);

                    ob = null;

                    serialized = null;
                }
            }

//server
    public void ReceiveImage(JObject o)
            {
                var content = o["content"].ToString();

                var image = GetImageFromString(content);

                var form = new ImagePreviewForm(image);

                form.Show();
            }

//server

    public ImagePreviewForm(Image image)
            {
                InitializeComponent();

                pictureBox1.Image = image;
            }
图像是空白的

我已经检查,图像接收正确,没有数据丢失


这里会出什么问题?我应该看哪里?

在UI线程可以正确显示图像之前,使用
using
语句处理图像。将代码从
using
块中取出,并将
Dispose()
语句添加到Form.Close()方法中。

这至少是一个问题:

return Convert.ToBase64String(stream.GetBuffer());
您不应该在此处使用
MemoryStream.GetBuffer
——您应该使用
ToArray
GetBuffer
方法按原样返回基础缓冲区。。。在缓冲区的末尾完成垃圾数据,超过流的逻辑当前长度

此外,您不应该在调用时关闭流。从文档中:

您必须在映像的生命周期内保持流打开

因此,使用
GetImageFromString
中的
语句摆脱