Захват изображения экрана в C ++ на OSX - PullRequest
8 голосов
/ 08 октября 2009

Есть ли способ программно сделать снимок экрана (или каким-то образом получить доступ к изображению) текущего экрана на Mac?

Предпочтительно, в C ++, а не в Objective-C.

Ответы [ 3 ]

0 голосов
/ 23 сентября 2016

Я рекомендую использовать Quartz Display Services и функцию CGDisplayCreateImage()

0 голосов
/ 13 апреля 2018

Я работал над той же проблемой. Это код, который я придумал после поиска некоторое время.

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 (). Хотя я сам ищу альтернативу для сохранения снимка экрана в файл с именем файла на основе отметки времени.

0 голосов
/ 09 октября 2009

Использовать снимок экрана (1).

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

Вызовите его с помощью system () или posix_spawn ().

...