【发布时间】:2017-02-20 09:34:37
【问题描述】:
我试图弄清楚如何截取当前未聚焦的窗口的屏幕截图,因此该窗口很可能会被其他窗口部分或完全遮挡。
我在此链接Get a screenshot of a window that is cover or not visible or minimized with Xcomposite extension for X11 上找到了一个示例,但我无法使其正常工作,任何时候我截取屏幕截图时都会得到奇怪的输出,大部分是黑色的,就像我访问错误的缓冲区或其他东西一样.
XID xid = windowID; // Checked and confirmed that the window ID is correct
XGetWindowAttributes( display, windowID, &attrributes );
XCompositeRedirectWindow (display, xid, CompositeRedirectAutomatic);
Pixmap pixmap = XCompositeNameWindowPixmap (display, xid);
// Extract the data
XRenderPictFormat *format = XRenderFindVisualFormat (display, attrributes.visual);
XRenderPictureAttributes pa;
pa.subwindow_mode = IncludeInferiors;
Picture picture = XRenderCreatePicture (display, xid, format, CPSubwindowMode, &pa);
QPixmap finalPix (attrributes.width, attrributes.height);
XRenderComposite (display, PictOpSrc, picture, None, finalPix.x11PictureHandle(), 0,0, 0,0, 0,0, attrributes.width, attrributes.height);
XFreePixmap (display, pixmap);
XCompositeUnredirectWindow (display, xid, CompositeRedirectAutomatic);
return finalPix;
(编辑: 这个截图是从一个完全可见的窗口中截取的,而不是一个被遮挡的窗口,所以我想目前的问题甚至不是 X11 没有绘制它,而是我的实现似乎无法正常工作,我不知道为什么。)
这就是我的 konsole 窗口的屏幕截图的样子:
【问题讨论】:
-
看起来我没有将任何内容复制到 QPixmap 中。当我创建一个具有一定大小的空 QPixmap 时,我得到相同的输出......
标签: linux qt screenshot x11