2012-01-17 2 views
5

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

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

вы можете попробовать с этим также UIGraphicsBeginImageContextWithOptions (view.bounds.size, view.opaque, 0.0); –

+0

спасибо, но ничего не изменилось! –

+2

Когда вы говорите «низкое качество», что именно вы имеете в виду? Изображение не похоже на то, что на экране? Используете ли вы экран сетчатки, но захваченное изображение не такое резкое? Является ли изображение зернистым или искаженным? Что в этом плохого? – TigerCoding

ответ

22

Я думаю, вам нужно захватить 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]; 
+0

отлично! работайте для меня! – frank

1

Technical Q&A QA1703 имеет действительно хороший образец чтобы сделать снимок экрана.

Я не знаю, могу ли я опубликовать его здесь, но он доступен по ссылке.

Смежные вопросы