スクリーンショットを劣化させずに保存する方法

2011-11-21 12:25

[Xcode TIPS] UIViewのスクリーンショットを高画質でカメラロールに保存する方法 | ALOG | THE AGE.

スクリーンショットを撮ってフォトライブラリになるとなぜか画質が荒くなるので、
原因を調べていたところ、
どうやら定番の方法、

CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(rect.size);
[[UIApplication sharedApplication].keyWindow.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *capture = UIGraphicsGetImageFromCurrentImageContext();

⬆こんな感じだと、JPEGでUIImageが生成されるので荒くなるらしい。
 
ちなみにユーザーがやる ホームボタン+電源ボタンで撮るやつは
PNGなので、画面表示そのままの状態が保存されるとのこと。

で、上記ブログに記載されているように、
PNGデータを生成してそこからUIImageを生成すると、
ちゃんと荒くない奇麗な画質で保存できた。
感謝しまくりです。

CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextFillRect(ctx, rect);
[self.view.layer renderInContext:ctx];
NSData *data = UIImagePNGRepresentation(UIGraphicsGetImageFromCurrentImageContext());
UIImage *capture = [UIImage imageWithData:data];
UIGraphicsEndImageContext();

ちなみに自分は⬆のようにやりました。
サイズを変えただけですけどね。

いやー助かりました