如何使用Xlib将一个窗口的内容复制到另一个窗口?

时间:2011-02-11 01:47:26

标签: c x11

我想使用Xlib将现有Window的内容复制到我自己的Window。我尝试过XCopyArea,它拒绝在两个Windows之间复制。我也尝试过XGetImage和XPutImage,它也失败了。

将窗口的图形内容复制到我自己的最佳方法是什么?

第二部分:
根据以下信息,我能够使XCopyArea和XGetImage工作。它无法工作的原因是源和目标窗口的深度不同。我惊讶地发现不同的Windows在我的桌面上有不同的深度。

但是我对XCopyArea的成功仍然有限。如果我从某些 Windows(例如Google Chrome)的顶部开始复制,则不会复制整个区域,只会复制标题栏。在这些情况下,XGetImage工作正常。有关为什么XCopyArea不会复制到某些 Windows的标题栏之外的任何线索?

1 个答案:

答案 0 :(得分:3)

XCopyArea应该没问题。 请注意,这只会复制到目标的前景 - 可能正在绘制然后删除?

没有代码,我可以推测:

如果失败了,您是否检查过窗口肯定具有相同的根和深度? 还要确保查看X Window坐标系。也许尝试复制,以便复制的一角位于目的地的中心,看看你是否能得到任何东西。

您通常需要某种方法在目标窗口中处理Expose事件,以便进行刷新。

我建议将Pixmap创建为中间件。 Pixmap和Window都是可绘制的。 使用XCopyArea复制到Pixmap中。 然后使用XSetWindowBackgroundPixmap实际渲染图像。设置背景意味着您可以忽略处理Expose事件以重绘图像的任何需要。