2013-01-07 13 views
7

Występuje niespójność między zrzutem ekranu (programowo za pomocą poniższego kodu) i tym, co aktualnie jest na ekranie, gdy obraz jest powiększany (bardzo daleko w moim przypadku) i renderowany jako najbliższy sąsiad do zachowania twarde krawędzie. Na tych forach otrzymałem następujący kod zrzutu ekranu, ale to, co zostaje zapisane, to renderowanie (dwójkowe?) Obrazu zamiast najbliższego sąsiada.programowalny zrzut ekranu przedstawiający fałszywego sąsiada

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

sposób zrobić najbliższego sąsiada jest z następującą linię w viewDidLoad

automataView.layer.magnificationFilter = kCAFilterNearest; 

(automataView jest UIImageView z pliku GIF w nim, a on dodawany jako podrzędny do UIScrollView, które obsługuje powiększanie)

Oto dwa obrazy, pierwszy to, co jest na ekranie, drugi to, co zostanie zapisane za pomocą powyższego kodu zrzutu ekranu. (Przepraszam za linki - „jako spam mechanizmu prewencji, nowi użytkownicy nie mogą dodawać obrazy”)

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

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

Dziękuję za wszelką pomoc!

+0

Czy znalazłeś jakieś rozwiązanie? –

Odpowiedz

3

Jeśli pytanie jest nadal aktualne.

Pomyślałbym, że interpolacja jest czymś, co ustawiasz w obiekcie, który rysuje się w kontekście, ale wydaje się, że kontekst sam dokonuje interpolacji, ma atrybut CGInterpolationQuality z geterem i seterem. Tak więc działa następująca zmiana w opisie:

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