【问题标题】:high compress Image高压缩图像
【发布时间】:2010-08-20 00:41:09
【问题描述】:

我正在尝试做一个“远程桌面查看器”。 为此,我需要发送用户的桌面 - 并且有很多关于套接字的信息......(特别是如果分辨率很高并且信息可以接近 5.3MB (1680X1050))

所以我开始使用 GZIP 流进行压缩,5.3MB 变成了 500KB,然后我添加了自己的压缩算法(我认为它称为 RLE) - 采用接近像素并以 1) 具有 256 >> 3 = 的格式写入32 种颜色(分别代表红色、蓝色、绿色)并写下一行中有多少像素具有相同的颜色。 + GZIP。

这使压缩率平均为 60~65KB - 最高 200KB,如果屏幕全白,它也可以低于 5000。

现在 - 我认为(但尚未实现)传递每帧之间的差异 - 对于我写的每一行,差异(像素之间)从哪里开始以及差异有多长。 好吧,它可以提供帮助——也许我平均每帧可以获得 30KB。但对于套接字来说,它很多。

有没有人成功地解决了这个问题? (当然还有……)

【问题讨论】:

  • 您是否考虑过使用 RDP 或 VNC?这两种协议都完全执行您正在尝试执行的操作。
  • 人们提出了比 gzip 或简单的行程编码更复杂、更复杂的压缩算法。这是一个独立的研究课题。远程查看特别有趣,因为您可以通过仅编码连续屏幕之间的差异而不是整个屏幕来节省带宽。大多数当前的软件已经这样做了,尽管坦率地说远程桌面和 VNC 离当前研究的高度还很远。

标签: c# sockets compression


【解决方案1】:

有用于压缩图像的标准算法:例如JPEG。

进一步的优化是了解图像的一些信息:例如,在桌面上,Windows 开始按钮、各种应用程序图标和标题栏上的小部件等项目是标准的:因此,与其发送它们的像素值,不如发送它们的像素值,你可以发送他们的逻辑标识符。

是的,人们已经成功解决了这个问题:编写远程桌面软件的人,包括开源 VNC。

【讨论】:

  • 非常感谢(所有)你,顺便说一句,是的,我试过JPG(和gif)......当质量为0时它变成〜60KB然后图片不是完全清楚。谢谢,我会顺便看看这个“VNC”——只发送改变的像素的想法就像你说的一样——我不会每张照片都发送给他们。再次感谢。
  • @Ohad JPG 是“有损”压缩;有无损算法,包括我认为例如GIF 和 PNG。
  • GIF 丢失的数据比 JPG 多...PNG 可能不错(我还没有检查过 PNG),但压缩不够。
  • GF 不会失去清晰度,但会失去色深:它是 8 位颜色。降低颜色深度以换取提高性能对于远程桌面的最终用户来说可能是可接受的/有益的。
  • 主要包含文本和 UI 控件的普通窗口仅使用少量颜色,因此可以将其放入 256 种颜色中。当然它必须自适应地完成(仅适用于文本或空白的矩形)
【解决方案2】:

您可能希望查看VNC 的源代码。

大多数 VNC 服务器实现了几种不同形式的压缩。

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多