2013-01-07 3 views
7

画像を拡大したとき(私の場合は非常に遠い)にスクリーンショット(プログラムで以下のコードを使用します)と実際に画面に表示されるものとの間に矛盾がありますハードエッジ私はこれらのフォーラムから次のスクリーンショットコードを入手しましたが、保存されるのは、最近傍の代わりに画像をレンダリングすることです(バイリニア?)。プログラムによるスクリーンショット最近傍点を間違って表現する

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のにサブビューとして追加されます

ここで2つの画像があります。最初は画面上のもの、もう1つは上記のスクリーンショットコードを使用して保存されます。 (リンクについては申し訳ありません - 「スパム防止機構として、新しいユーザーが画像を投稿することは許可されていません」)

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

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

任意の助けをありがとう!

+0

解決策はありますか? –

答えて

3

質問がまだ関連している場合。

私は、補間はあなた自身がコンテキストで描画するオブジェクトに設定したものだと思っていましたが、コンテキスト自体が補間を行うようですが、ゲッターとセッターでCGInterpolationQualityという属性があります。だからあなたのスニペットに次の変更が私のために働く:

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); 
関連する問題