如何在C+中拍摄模糊窗口的屏幕截图+;在Linux上
我试图找出如何拍摄当前未聚焦的窗口的屏幕截图,因此该窗口很有可能被其他窗口部分或完全遮挡 我在这个链接上找到了一个例子,但我无法让它工作,每当我拍摄屏幕截图时,我只得到奇怪的输出,大部分是黑色的,就像我访问了错误的缓冲区或其他东西如何在C+中拍摄模糊窗口的屏幕截图+;在Linux上,linux,qt,screenshot,x11,Linux,Qt,Screenshot,X11,我试图找出如何拍摄当前未聚焦的窗口的屏幕截图,因此该窗口很有可能被其他窗口部分或完全遮挡 我在这个链接上找到了一个例子,但我无法让它工作,每当我拍摄屏幕截图时,我只得到奇怪的输出,大部分是黑色的,就像我访问了错误的缓冲区或其他东西 XID xid = windowID; // Checked and confirmed that the window ID is correct XGetWindowAttributes( display, windowID, &attrribu
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窗口的屏幕截图:
首先,Qt具有此功能。您可以使用:。 问题是,文档中说: 在X11上注意,如果给定窗口的深度与 根窗口和另一个窗口部分或全部遮挡了 如果你抓取一个,你将无法从上面的窗口中获取像素。这个 pixmap中模糊区域的内容将是未定义的,并且 未初始化 所以这将简化您的代码,但窗口的模糊部分仍然是一个问题。看来x11的功能无法解决此问题
有一个很好的例子。感谢您指出这一点,尽管我相信这个函数是在Qt5.0中引入的,我使用的是4.8。此外,它并没有解决我的主要问题,即我无法捕获模糊的窗口或框架。只是一个可见窗口的屏幕截图不是问题,我有WId,从那里我得到窗口属性,比如窗口位置和大小,我只是在那个位置抓取一个矩形,这不是问题。我不确定这在X11上是否可行,或者我是否必须使用其他东西……这实际上根本不能回答我的问题。我正在寻找一个解决方案来拍摄一个模糊窗口的屏幕截图,答案是这个解决方案不可能做到这一点,因此完全误导了“pixmap中模糊区域的内容将是未定义和未初始化的。”。看起来我没有在QPixmap中截取任何内容。当我创建一个具有一定大小的空QPixmap时,我得到了相同的输出。。。