2013-01-07 73 views
7

我遇到了屏幕截圖(以編程方式使用下面的代碼)與屏幕上實際顯示的圖像放大(在我的情況下很遠)並呈現最近鄰居時保留的不一致硬邊緣。我從這些論壇獲得了以下屏幕截圖代碼,但保存的內容是(雙線性?)渲染圖像而不是最近鄰居。programmatic screenshot misrepresenting nearest-neighbour

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

我做最近鄰居的方法是在viewDidLoad中以下行

automataView.layer.magnificationFilter = kCAFilterNearest; 

(automataView是與它一個GIF文件一個UIImageView,它的添加爲一個子視圖到一個UIScrollView這處理變焦)

這裏有兩個圖像,第一個是屏幕上的內容,第二個是使用上述屏幕截圖代碼保存的內容。 (遺憾的鏈接 - 「爲防止垃圾郵件的機制,新用戶不得發表圖片」)

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

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

感謝您的幫助!

+0

您是否找到任何解決方案? –

回答

3

如果問題仍然相關。

我以爲插值是你在上下文中繪製自己的對象中設置的東西,但似乎上下文本身做了一些插值,它具有屬性CGInterpolationQuality與getter和setter。因此,以下更改爲您的代碼段適用於我:

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