我试图弄清楚如何拍摄当前没有聚焦的窗口的屏幕截图,因此窗口很可能被其他窗口部分或完全遮挡。
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窗口的截图: