8

有没有办法以编程方式截取 Mac 上当前屏幕显示的屏幕截图(或以某种方式访问​​图像)?

最好是在 C++ 中,而不是在 Objective-C 中。

4

3 回答 3

2

我一直在解决同样的问题。这是我搜索了一段时间后想出的代码。

CGImageRef screenShot = CGWindowListCreateImage( CGRectInfinite, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);

//std::string image_name = "/Users/nikhil/Desktop/SC_";
//image_name+=str;
//cout<<str<<endl;

//image_name+=".jpg";
//cout<<image_name<<endl;
CFStringRef file = CFSTR("/Users/nikhil/Desktop/SC.jpg");
CFStringRef type = CFSTR("public.jpeg");
CFURLRef urlRef = CFURLCreateWithFileSystemPath( kCFAllocatorDefault, file, kCFURLPOSIXPathStyle, false );
CGImageDestinationRef image_destination = CGImageDestinationCreateWithURL( urlRef, type, 1, NULL );
CGImageDestinationAddImage( image_destination, screenShot, NULL );
CGImageDestinationFinalize( image_destination );

你必须给 CFSTR() 一个静态字符串。尽管我自己正在寻找将屏幕截图存储到具有基于时间戳的文件名的文件的替代方法。

于 2018-04-13T06:17:05.267 回答
0

使用屏幕截图 (1)。

http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/screencapture.1.html

使用 system() 或 posix_spawn() 调用它。

于 2009-10-09T05:44:51.557 回答
0

我推荐使用Quartz Display Services和功能CGDisplayCreateImage()

于 2016-09-23T12:50:57.600 回答