我有基本的观看基础工作,但我现在想要实现更复杂的系统。我有一个方法返回一个Bitmap,其中包含一个子集,该子集是包含屏幕所有更改像素的最小矩形区域。因此,我现在想要传递更新的像素Bitmap 和其矩形边界数据,而不是简单地使用BinaryFormatter通过NetworkStream序列化完整的桌面快照,然后我想传递更新的像素Bitmap 和可以有效地将更新的像素粘贴在第一个桌面快照(在开始会话时发送)的正确位置。
对于这种类型的协议,一起发送/接收Bitmap和Rectangle的最佳方法是什么?
非常感谢任何帮助。
答案 0 :(得分:0)
我在发布此问题后不久发现BinaryFormatter的序列化/反序列化具有System.Runtime.Remoting.Messaging.Headers[]
参数。我能够像这样有效地处理数据:
<强>客户端:强>
Rectangle bounds = Rectangle.Empty;
Bitmap image = Utils.Screen(ref bounds);
BinaryFormatter bFormat = new BinaryFormatter();
Header[] headers = { new Header("bounds", bounds) };
bFormat.Serialize(stream, image, headers);
服务器强>
BinaryFormatter bFormat = new BinaryFormatter();
Rectangle bounds = new Rectangle();
Bitmap inImage = bFormat.Deserialize
(
stream,
headers =>
{
foreach(var header in headers)
{
if(header.Name == "bounds")
bounds = (Rectangle)header.Value;
}
return null;
}
) as Bitmap;