Qt图像I / O和QPixmap :: grabWindow

时间:2012-05-06 09:53:01

标签: c++ image qt io

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

添加到Michaels答案:

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

答案 2 :(得分:1)

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