Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C+中拍摄模糊窗口的屏幕截图+;在Linux上_Linux_Qt_Screenshot_X11 - Fatal编程技术网

如何在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时,我得到了相同的输出。。。