Qt image I/O and QPixmap::grabWindow

Qt image I/O and QPixmap::grabWindow

本文关键字:QPixmap grabWindow and image Qt      更新时间:2023-10-16

我正在编写一种"远程桌面"程序,但我被困在了几点上。我在服务器端使用 QPixmap::grabWindow 来捕获屏幕截图并将其发送到客户端,客户端又写入 QByteArray 并通过 QTcpSocket 发送。生成的 QPixmap 的大小太大,并且正如您所知,应用程序对时间要求很高。有没有办法优化它?

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

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

添加到迈克尔斯的答案:

  • 降低分辨率
  • 减少颜色深度
  • 降低帧速率
  • 使用截屏编解码器/解码器