【问题标题】:C# - How to use Jpeg to compress images and send to a server?C# - 如何使用 Jpeg 压缩图像并发送到服务器?
【发布时间】:2011-07-17 15:51:27
【问题描述】:


我想用 C# 构建一个屏幕共享程序。(使用 TCP)
我在网上搜索了一下,发现最有效的方法是从客户端向服务器发送大量屏幕截图。
关键是 - 我如何将位图压缩为 Jpeg - 在服务器上接收它并再次解压缩为位图(以便我可以在表单中显示它)?
我试过使用 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));
No imaging component suitable to complete this operation was found. 处抛出 NotSupportedException
所以我需要一种方法将位图转换为 Jpeg,然后转换为字节 [],然后通过 TCP 发送。
在另一端,做完全相反的事情。有什么建议吗?
谢谢。

【问题讨论】:

  • 这实际上是效率最低的方法。查看 RFB(远程帧缓冲区)协议

标签: c# tcp bitmap jpeg


【解决方案1】:

JPEG 是为照片设计的,而不是为屏幕截图而设计的。此外,大部分屏幕不会发生变化,只发送更改的部分并在大部分屏幕发生更改时仅发送全屏。

除非你只是为了好玩而这样做,否则你做这一切都是错的。 VNC 多年来一直在这样做,源代码是免费的,因此您可以看看它是如何完成的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2017-02-26
    • 2010-12-18
    • 2012-06-07
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多