Низкое качество захвата просмотра контекста на iPad - PullRequest
5 голосов
/ 17 января 2012

Мне нужно захватить определенный UIView, но результат в низком качестве, как это можно исправить и повысить качество?

UIGraphicsBeginImageContext(captureView.bounds.size);
    [captureView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
    UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil);
    UIGraphicsEndImageContext();

1 Ответ

22 голосов
/ 15 марта 2012

Полагаю, вам нужно захватить окно UIView / UIWindow с разрешением сетчатки (960x640 или 2048x1536). Использование UIGraphicsBeginImageContextWithOptions и установка его параметра масштаба 0.0f делает его захват в собственном разрешении (сетчатка для iPhone 4 и более поздних версий или iPad 3).

Этот код захватывает ваш UIView в собственном разрешении

CGRect rect = [captureView bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[captureView.layer renderInContext:context];   
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Этот код делает то же самое для полного экрана (окно ключа)

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[keyWindow.layer renderInContext:context];   
UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Это сохраняет UIImage в формате jpg с95% качество в папке документов приложения

NSString  *imagePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/capturedImage.jpg"]];    
[UIImageJPEGRepresentation(capturedImage, 0.95) writeToFile:imagePath atomically:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...