Qt image I/O and QPixmap::grabWindow
Qt image I/O and QPixmap::grabWindow
我正在编写一种"远程桌面"程序,但我被困在了几点上。我在服务器端使用 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发送时压缩整个数据流(这很棘手 - 您必须小心刷新缓冲区等。
添加到迈克尔斯的答案:
- 降低分辨率
- 减少颜色深度
- 降低帧速率
- 使用截屏编解码器/解码器
相关文章:
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- QPixmap在Qt中加载了许多图像
- 向 QPixmap 添加边框
- 通过信号槽发送QPixmap指针,空像素图数据
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 解决方法:QPixmap:在GUI线程之外使用pixmap是不安全的
- 如何在QWidget中获取QtDataVizualization的QPixmap并保存到文件中?
- 尝试使用 Qt 库中的 QPixmap 将图像拆分为多个块。关于他的复制方法的工作方式,我有什么不明白的吗?
- QPixmap复制速度
- qpixmap qclipboard和保存图像倒置
- 将一个 Qlabel 的 QPixmap 复制到另一个 Qlabel
- 我正在将QPixmap传递给QAbstractButton::setIcon而不是QIcon,但我没有得到错误...为什么?
- 从STD :: String获取QPIXMAP动态图像路径
- 在qpixMap中显示一个CV :: MAT(键入CV_32F)
- 如何将QPixMap转换为QPainterPath,反之亦然
- 如何在另一个类上使用qpixmap
- 如何使用QVector的QPixmap显示图像?
- 将 GDI Plus 位图转换为 QPixmap
- 如何使用QPixmap,以便在地址中只需要使用项目文件夹
- Qt image I/O and QPixmap::grabWindow