我想在C#中构建一个屏幕共享程序。(用TCP)
我在网上嗤之以鼻,发现最有效的方法是从客户端向服务器发送大量屏幕截图。
重点是 - 如何将Bitmap压缩为Jpeg - 在服务器上接收它并再次解压缩到Bitmap(所以我可以在表单中显示)?
我试过没有运气使用JpegBitmapEncoder,这是我的代码:
Bitmap screen = TakeScreenshot();
MemoryStream ms = new MemoryStream();
byte[] Bytes = BmpToBytes_Unsafe(screen);
ms.Write(Bytes, 0, Bytes.Length);
Jpeg = new JpegBitmapEncoder();
Jpeg.Frames.Add(BitmapFrame.Create(ms));
Jpeg.QualityLevel = 40;
Jpeg.Save(ms);
BinaryReader br = new BinaryReader(ms);
SendMessage(br.ReadBytes((int)ms.Length));
它在Jpeg.Frames.Add(BitmapFrame.Create(ms));
发出NotSupportedException
No imaging component suitable to complete this operation was found.
所以我需要一种方法将Bitmap转换为Jpeg,然后转换为byte [],然后通过TCP发送它
另一方面,正好相反。有什么建议吗?
谢谢。
答案 0 :(得分:4)
JPEG专为照片而设计,不适用于屏幕截图。此外,大部分屏幕都没有变化,只需发送更改的部分,只有当屏幕的大部分更改时才会显示全屏。
除非你只是为了好玩而做这件事,否则你就错了。 VNC多年来一直这样做,源代码是免费的,所以你可以看看它是如何完成的。