我编写了一个可可应用程序,它使用脚本桥来与特定最前端应用程序中的菜单进行交互,但我不希望用户看到脚本桥正在做的所有乱语。
所以我想在那个阶段冻结所有显示器的图像,我试图使用
CGCaptureAllDisplaysWithOptions(kCGCaptureNoFill);
这应该这样做,直到我打电话给
CGReleaseAllDisplays();
但它不会,所有的屏幕变黑。
我在这里尝试了解决方案" CGDisplayCaptureWithOptions (kCGDirectMainDisplay, kCGCaptureNoFill) still fills the screen with black"一个接一个地捕捉屏幕但仍然变黑。
有人知道为什么吗?有一些解决方法吗?
我还尝试了一种更复杂的方法,使用CGDisplayCreateImage
在捕获之前截取每个屏幕的屏幕截图。但是当我尝试将它们直接绘制到屏幕上下文时,会引发另一个问题。我使用CGDisplayGetDrawingContext
获取了上下文,并调用CGContextDrawImage
为每个屏幕绘制图像。
只有一个或镜像屏幕工作正常,但扩展屏幕只能在我的主屏幕上工作,另一个显示屏幕截图的子图像。
例如:
主屏幕:
CGDisplayBounds returns {{0, 0}, {1280, 800}}
CGRect rect1 = {{0, 0}, {CGImageGetWidth(screenshot1), CGImageGetHeight(screenshot1)}};
CGContextDrawImage(context1, rect1, screenshot1); //<- works fine
其他屏幕
CGDisplayBounds returns {{1280, 0}, {1920, 1080}}
CGRect rect2 = {{0, 0}, {CGImageGetWidth(screenshot2), CGImageGetHeight(screenshot2)}};
CGContextDrawImage(context2, rect2, screenshot2); //<-Shows a sub image of my screenshot with origin at (1280, 0) and frame {{1280, 0}, {1280 - 1920, 1080}}
显示器上显示的子图像: http://i.stack.imgur.com/zoUWe.jpg
原始截图: http://i.stack.imgur.com/KHjN6.jpg
有什么建议吗?