CGCaptureAllDisplaysWithOptions(kCGCaptureNoFill)仍然用黑色填充屏幕

时间:2014-10-01 15:40:01

标签: osx-mavericks quartz-graphics

我编写了一个可可应用程序,它使用脚本桥来与特定最前端应用程序中的菜单进行交互,但我不希望用户看到脚本桥正在做的所有乱语。

所以我想在那个阶段冻结所有显示器的图像,我试图使用

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

有什么建议吗?

0 个答案:

没有答案