2012-01-17 1 views
5

Ho bisogno di acquisire un UIView specifico, ma il risultato è di bassa qualità come può risolvere questo problema e aumentare la qualità?Bassa qualità del contesto della vista di acquisizione su iPad

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

puoi provare con questo anche UIGraphicsBeginImageContextWithOptions (view.bounds.size, view.opaque, 0.0); –

+0

grazie ma non cambia nulla! –

+2

Quando dici "bassa qualità" cosa intendi esattamente? L'immagine non ha lo stesso aspetto di quello che appare sullo schermo? Stai usando un display retina ma l'immagine catturata non è così nitida? L'immagine è sgranata o distorta? Cosa c'è di sbagliato in questo? – TigerCoding

risposta

22

immagino hai bisogno di una cattura di un UIView/UIWindow nella risoluzione retina (960x640 o 2048x1536) Utilizzando UIGraphicsBeginImageContextWithOptions e impostare il parametro di scala 0.0f rende catturare a risoluzione nativa (retina per iPhone 4 e versioni successive o iPad 3).

Questo codice catturare la vostra UIView in risoluzione nativa

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

Questo fa lo stesso per tutto schermo (finestra chiave)

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

Ciò consente di risparmiare l'UIImage in formato jpg con la qualità del 95% in cartella documenti del app

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

perfetto! lavora per me! – frank

1

Technical Q&A QA1703 detiene un campione veramente bello codice per fare uno screenshot.

Non so se posso postarlo qui ma è disponibile sul link.