2010-10-28 73 views
3

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

CGImageRef windowImage = CGWindowListCreateImage(CGRectNull, 
               kCGWindowListOptionAll, 
               (CGWindowID)[self windowNumber], 
               kCGWindowImageDefault); 

这是图片应该是什么样子:

alt text

和这里就是我得到的(忽略稍大的尺寸 - 这是我在图像的渲染错误):

alt text

钙任何人都看到我要去哪里错了?奇怪的是,Quartz Debug可以看到窗口图像没有问题,但Son of Grab sample code from Apple不能。

+0

我想要捕捉屏幕窗口。你有没有找到答案? – Sean 2011-09-21 21:00:26

+0

我想确认CGWindowListCreateImage不会在10.9上捕获离线窗口kCGWindowListOptionIncludingWindow。 – GenericPtr 2014-07-28 19:29:29

回答

2

从CGWindow.h为CGWindowListCreateImage文档注释:

kCGWindowListOptionAllkCGWindowListOptionOnScreenOnly:使用屏幕上的所有窗口在这个用户会话来构建图像。参数windowID应该是kCGNullWindowID

这就是为什么你得到所有你感兴趣的矩形。

内采取特定窗口的截图窗口的截图,使用kCGWindowListOptionIncludingWindow

+0

感谢彼得,我应该在我的问题中提到,我也尝试过这个选项,无济于事。这个有趣的部分是,被捕获的矩形不是窗口在屏幕上/可见时坐在的矩形。 – 2010-10-28 04:35:52