Capture Screen Image in C++ on OSX

后端 未结 3 1005
耶瑟儿~
耶瑟儿~ 2020-12-09 06:31

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.<

相关标签:
3条回答
  • 2020-12-09 06:51

    Use screencapture(1).

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

    Invoke it with system() or posix_spawn().

    0 讨论(0)
  • 2020-12-09 07:06

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

    0 讨论(0)
  • 2020-12-09 07:07

    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.

    0 讨论(0)
提交回复
热议问题