Низкое качество захвата просмотра контекста на iPad
Мне нужно захватить конкретный UIView, но результат в низком качестве, как это можно исправить и повысить качество?
UIGraphicsBeginImageContext(captureView.bounds.size);
[captureView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil);
UIGraphicsEndImageContext();
1 ответ
Я предполагаю, что вам нужно захватить окно 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];
Технические вопросы и ответы QA1703 содержит действительно хороший пример кода для создания скриншота.
Я не знаю, смогу ли я опубликовать это здесь, но это доступно по ссылке.