相关疑难解决方法(0)

通过WCF发送图像的有效方式?

我正在学习WCF,LINQ和其他一些技术,从头开始编写自定义远程控制应用程序,如VNC.我在创建它时考虑到三个主要目标:

  1. 服务器将在应用程序级别(即无缝窗口)上提供"远程控制",而不是完全桌面访问.
  2. 客户端可以选择服务器上运行的任意数量的应用程序,并接收每个应用程序的图像流.
  3. 客户端可以同时连接到多个服务器.

现在我正在使用WCF发送一个表示正在发送的窗口的字节数组:

using (var ms = new MemoryStream()) {
    window.GetBitmap().Save(ms, ImageFormat.Jpeg);
    frame.Snapshot = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

GetBitmap实现:

var wRectangle = GetRectangle();
var image = new Bitmap(wRectangle.Width, wRectangle.Height);
var gfx = Graphics.FromImage(image);

gfx.CopyFromScreen(wRectangle.Left, wRectangle.Top, 0, 0, wRectangle.Size, CopyPixelOperation.SourceCopy);

return image;
Run Code Online (Sandbox Code Playgroud)

它然后通过WCF(TCPBinding,它将始终通过LAN)发送到客户端,并在没有边框的空白窗口形式重建,如下所示:

using (var ms = new MemoryStream(_currentFrame.Snapshot))
{
    BackgroundImage = Image.FromStream(ms);
}
Run Code Online (Sandbox Code Playgroud)

我希望这个过程在CPU和内存使用方面尽可能高效,带宽排在第三位.我的目标是让客户端连接到5台服务器,每台服务器有10多个应用程序.

我现有的方法是最好的方法(同时继续使用这些技术)并且我能做些什么来改进它?

我正在研究的想法(但我没有经验):

  • 使用开源图形库来捕获和保存图像,而不是.Net解决方案.
  • 保存为PNG或其他图像类型而不是JPG.
  • 每次发送图像增量而不是完整图像.
  • 尝试并"记录"窗口并创建压缩视频流而不是图片快照(mpeg?).

c# wcf

24
推荐指数
2
解决办法
2万
查看次数

标签 统计

c# ×1

wcf ×1