在OSX上用C ++捕获屏幕图像

时间:2009-10-08 12:48:48

标签: c++ macos screen-capture

有没有办法以编程方式在mac上截取当前屏幕显示的屏幕截图(或以某种方式获取图像)?

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

3 个答案:

答案 0 :(得分:0)

使用screencapture(1)。

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

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

答案 1 :(得分:0)

我建议使用 Quartz Display Services 和函数CGDisplayCreateImage()

答案 2 :(得分:0)

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

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()提供静态字符串。虽然我自己正在寻找将screencapture存储到基于时间戳的文件名的文件的替代方法。