Neo
Neo

Reputation: 11

make screenshot of the whole screen in ios7

I'm trying to take screenshot of the whole screen from a command line tool compiled with THEOS. I've tried all the Private APIs UICreateScreenImage, UIGetScreenImage and _UICreateScreenUIImage, all return a black or empty image (but the size of the picture is correct)

This is my code that use the "_UICreateScreenUIImage" API:

    extern "C" UIImage* _UICreateScreenUIImage();

    int main(int argc, char **argv, char **envp) {

        UIImage* screenImage = _UICreateScreenUIImage();

        [UIImagePNGRepresentation(screenImage) writeToFile:@"/var/mobile/screenshot.png" atomically:YES];

        [screenImage release];
        return 0;
    }

I've linked the frameworks: Foundation UIKit QuartzCore CoreGraphics and GraphicsServices as private framework. I can't use the Apple way described here Why does my programmatically created screenshot look so bad on iOS 7? because is a command line tool. Any suggestions?

Upvotes: 1

Views: 1516

Answers (1)

Minh Quy
Minh Quy

Reputation: 665

you can try my code. It worked for me.

Option 1:

- (void)takeScreenshotAndSaveToPhotosAlbum {
    extern UIImage *_UICreateScreenUIImage();
    UIImage *screenshot = _UICreateScreenUIImage();
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil);
}

Option 2:

typedef struct __IOSurface *IOSurfaceRef;
UIKIT_EXTERN CGImageRef UICreateCGImageFromIOSurface(IOSurfaceRef);

- (void)takeScreenshotAndSaveToPhotosAlbum {
    IOSurfaceRef ioSurfaceRef = (__bridge IOSurfaceRef)([UIWindow performSelector:@selector(createScreenIOSurface)]);
    CGImageRef cgImageRef = UICreateCGImageFromIOSurface(ioSurfaceRef);
    UIImage *uiImage = [UIImage imageWithCGImage:cgImageRef];
    CFRelease(ioSurfaceRef);
    CGImageRelease(cgImageRef);
    UIImageWriteToSavedPhotosAlbum(uiImage, nil, nil, nil);
}

Upvotes: 2

Related Questions