C# - 如何使用Jpeg压缩图像并发送到服务器?

时间:2011-07-17 15:51:28

标签: c# tcp bitmap jpeg


我想在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发送它 另一方面,正好相反。有什么建议吗? 谢谢。

1 个答案:

答案 0 :(得分:4)

JPEG专为照片而设计,不适用于屏幕截图。此外,大部分屏幕都没有变化,只需发送更改的部分,只有当屏幕的大部分更改时才会显示全屏。

除非你只是为了好玩而做这件事,否则你就错了。 VNC多年来一直这样做,源代码是免费的,所以你可以看看它是如何完成的。