1

我正在编写一种“远程桌面”程序,但我遇到了一些问题。我在服务器端使用 QPixmap::grabWindow 来捕获屏幕截图并将其发送到客户端,然后将其写入 QByteArray 并通过 QTcpSocket 发送。生成的 QPixmap 的大小太大,并且如您所知,应用程序对时间至关重要。有没有办法优化它?

4

3 回答 3

1
  • 使用增量。基本思想是这样的:想象一个覆盖窗口图像的网格,将其划分为 16 像素 x 16 像素左右的正方形。将每个方块与前一个窗口中发送给客户端的对应方块进行比较。如果只有一个像素发生了变化,就将方块的新内容发送给客户端。
  • 尝试使用某种形式的快速压缩来压缩图像。例如,您可以使用zlib ,但将压缩级别保持在 3 或以下。或者您可以在通过 TCP 发送时压缩整个数据流(这很棘手 - 您必须小心刷新缓冲区等。)
于 2012-05-06T10:07:24.643 回答
1

添加到迈克尔斯的答案:

  • 降低分辨率
  • 减少颜色深度
  • 降低帧率
  • 使用截屏编解码器/解码器
于 2012-05-06T12:47:04.143 回答
1

(除了迈克尔更详细的答案:)对于压缩,您可以使用 qCompress / qUncompress (这实际上取决于 Qt 包含的 zlib)http://qt-project.org/doc/qt-4.8/qbytearray.html#qUncompress

于 2012-05-06T18:57:16.033 回答