Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 如何抓取屏幕外窗口的图像?_Cocoa_Nswindow_Cgimage - Fatal编程技术网

Cocoa 如何抓取屏幕外窗口的图像?

Cocoa 如何抓取屏幕外窗口的图像?,cocoa,nswindow,cgimage,Cocoa,Nswindow,Cgimage,我正在尝试获取屏幕外窗口的图像,以便在基于CALayer的动画中使用,但无论我尝试哪种方法,我都无法从另一侧获取图像。以下是我在项目中的自定义NSWindow子类上使用的代码: CGImageRef windowImage = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionAll,

我正在尝试获取屏幕外窗口的图像,以便在基于
CALayer
的动画中使用,但无论我尝试哪种方法,我都无法从另一侧获取图像。以下是我在项目中的自定义
NSWindow
子类上使用的代码:

CGImageRef windowImage = CGWindowListCreateImage(CGRectNull, 
                                                 kCGWindowListOptionAll, 
                                                 (CGWindowID)[self windowNumber], 
                                                 kCGWindowImageDefault);
这是图像的外观:

下面是我得到的(忽略稍大的尺寸-这是我在渲染图像时的错误):


有人能看出我哪里做错了吗?奇怪的是,Quartz Debug可以看到没有问题的窗口映像,但无法看到。

来自CGWindow中
CGWindowListCreateImage
的文档注释。h:

KCGWINDOWLISTOPTIONAL
KCGWINDOWLISTOPTIONNSCLEENOLY
:使用此用户会话中的所有屏幕窗口构建图像。参数
windowID
应为
kcnullwindowid

这就是为什么你会得到你感兴趣的矩形内所有窗口的屏幕截图


要拍摄特定窗口的屏幕截图,请使用
kcgwindowlistoption includingwindow

谢谢Peter,我应该在问题中提到,我也尝试了该选项,但没有效果。有趣的是,当窗口在屏幕上/可见时,被捕获的矩形不是窗口所在的矩形。我也想捕获一个屏幕外的窗口。你找到过这个问题的答案吗?我想确认CGWindowListCreateImage不会在10.9上捕获屏幕外的窗口KCGWindowListoption(包括windows)。