2013-01-07 17 views
7

Sto riscontrando un'incongruenza tra uno screenshot (usando programmaticamente il codice seguente) e ciò che è effettivamente sullo schermo quando un'immagine viene ingrandita (molto lontano nel mio caso) e resa vicino-vicino per preservare i bordi duri. Ho ottenuto il seguente codice di screenshot da questi forum, ma ciò che viene salvato è un rendering (bilineare?) Dell'immagine anziché un vicino più vicino.screenshot programmatico travisando il vicino più prossimo

UIGraphicsBeginImageContextWithOptions([[UIScreen mainScreen] bounds].size, NO, 0.0); 
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *imageView = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(imageView, nil, nil, nil); 

il mio modo di fare più vicino-vicino di casa è con la seguente riga nel viewDidLoad

automataView.layer.magnificationFilter = kCAFilterNearest; 

(automataView è un'UIImageView con un file GIF in esso, e viene aggiunto come una visualizzazione secondaria ad un'UIScrollView che gestisce lo zoom)

Ecco due immagini, la prima è ciò che è sullo schermo, la seconda è ciò che viene salvato utilizzando il codice di cui sopra. (Mi dispiace per i collegamenti - "come un meccanismo di prevenzione dello spam, i nuovi utenti non posso accedere a pubblicare immagini")

http://www.flickr.com/photos/[email protected]/8358662379/

http://www.flickr.com/photos/[email protected]/8358662715/

Grazie per tutto l'aiuto!

+0

Avete trovato qualche soluzione? –

risposta

3

Nel caso in cui la domanda sia ancora pertinente.

Avrei pensato che l'interpolazione è qualcosa che si imposta nell'oggetto che si disegna nel contesto, ma sembra che il contesto stesso faccia qualche interpolazione, ha l'attributo CGInterpolationQuality con getter e setter. Quindi la seguente modifica allo snippet funziona per me:

UIGraphicsBeginImageContextWithOptions([[UIApplication sharedApplication] keyWindow].bounds.size, NO, 0.0); 
CGContextRef cgr = UIGraphicsGetCurrentContext(); 
CGContextSetInterpolationQuality(cgr, kCGInterpolationNone); 
[self.view.layer renderInContext:cgr]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 
Problemi correlati