【发布时间】:2019-11-19 05:52:44
【问题描述】:
我正处于团队查看器主题项目的初期。
现在我设法将当前屏幕的屏幕截图作为位图变量,我需要通过套接字将其传输到远处。这样的过程显然需要使用 json 序列化 Bitmap 变量。
我已尝试这样做,但似乎 Bitmap 变量不能序列化。在序列化之后,json 字符串 var 包含字符串“system.Drawing.Bitmap”。如何正确转换它?谢谢。
截图方法:
public static Image TakeScreen()
{
Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CopyFromScreen(0,0, 0, 0, bitmap.Size);
Console.WriteLine(bitmap.ToString());
return bitmap;
}
序列化:
Image image = TakeScreen();
string jsonData = JsonConvert.SerializeObject(image, Formatting.None);
Console.WriteLine(jsonData);
【问题讨论】:
-
为什么要将图像作为 JSON 发送?如果您使用的是 HTTP,则可以作为字节数组发送。
-
您不会将图像序列化为 JSON。 JSON 用于序列化对象而不是字节,因此名称为 Javascript
ObjectNotation。对于图像或任何文件,您只需发送字节流。 -
别忘了在处理完
Image image后将其处理掉,最好将其括在using语句中。 -
看看How do I Serialize object to json using json.net which contains an image property。但是性能可能很差,因为 Json.NET 会将
Base64图像流完全具体化为string,然后是字节数组;见Json.Net deserialize out of memory issue。
标签: c# json sockets serialization bitmap