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
中的语句摆脱