Capture Screen Image in C++ on OSX

瘦欲@ 提交于 2019-11-27 15:07:11

问题


Is there a way to programatically take a screenshot (or somehow get access to an image) of the current screen display on a mac?

Preferably, in C++, not Objective-C.


回答1:


I have been working on the same problem. This is the code I came up with after searching for a while.

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 );

You have to give a static string to CFSTR(). Although I myself am looking for alternative to store the screencapture to a file with timestamp based file name.




回答2:


Use screencapture(1).

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

Invoke it with system() or posix_spawn().




回答3:


I recommand usage of Quartz Display Services and function CGDisplayCreateImage()



来源:https://stackoverflow.com/questions/1537587/capture-screen-image-in-c-on-osx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!