2012-01-17 13 views
5

Necesito capturar UIView específico, pero el resultado es de baja calidad, ¿cómo se puede solucionar esto y aumentar la calidad?Baja calidad del contexto de vista de captura en el iPad

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

puedes probar con esto también UIGraphicsBeginImageContextWithOptions (view.bounds.size, view.opaque, 0.0); –

+0

gracias, pero nada cambia! –

+2

Cuando dice "baja calidad", ¿a qué se refiere exactamente? La imagen no se ve igual a lo que está en la pantalla? ¿Estás usando una pantalla de retina pero la imagen capturada no es tan nítida? ¿La imagen es granulada o distorsionada? ¿Qué está exactamente mal con eso? – TigerCoding

Respuesta

22

Creo que se necesita una captura de un UIView/UIWindow en la resolución retina (960x640 o 2048x1536) Usando UIGraphicsBeginImageContextWithOptions y establecer su 0.0f parámetro de escala hace que capturar en la resolución nativa (retina para el iPhone 4 y más tarde o iPad 3)

Este código capturar su UIView en la resolución nativa

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

Ésta hace lo mismo para pantalla completa (ventana de clave)

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(); 

Esto ahorra el UIImage en formato jpg con una calidad de 95% en la carpeta de documentos de la aplicación

NSString *imagePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/capturedImage.jpg"]];  
[UIImageJPEGRepresentation(capturedImage, 0.95) writeToFile:imagePath atomically:YES]; 
+0

perfecto! ¡trabaja para mi! – frank

1

Technical Q&A QA1703 tiene una muy buena muestra código para hacer una captura de pantalla.

No sé si puedo publicarlo aquí pero está disponible en el enlace.

Cuestiones relacionadas