2016-04-22 1 views
2

私はswiftで以下のコードを使用して、UIImageViewを1つのイメージにキャプチャします。それは動作しますが、イメージはUIImageViewに表示されるものと同じ品質ではありません。この画像をキャプチャするときに品質を設定する方法はありますか?レンダリング時のルーズな品質UIImageViewをスピーディーに

private func getScreenshow(imageView:UIImageView) -> UIImage{ 

    UIGraphicsBeginImageContext(self.imageView.frame.size) 
    let context = UIGraphicsGetCurrentContext() 

    imageView.layer.renderInContext(context!) 
    let screenShot = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    UIImageWriteToSavedPhotosAlbum(screenShot, nil, nil, nil) 
    return screenShot 
} 

答えて

2

一部の検索の後、私は問題を見つけました。私は "UIGraphicsBeginImageContext"の代わりに以下のコードを使用しています。

UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, true, 0) 
2

このコードはかなり奇妙に見える(なぜあなたはちょうどimageView.imageを使用していない?)が、私はあなたのユースケースの完全なコンテキストを知りません。

あなたが見つけたように、品質の低下の理由は、画面の網膜スケールを無視しているためです。

UIGraphicsBeginImageContextUIGraphicsBeginImageContextWithOptionsのドキュメントを読んでください。前者の場合、「倍率は1.0」です。

+0

他の多くのサブビューがimageViewに表示されているためです。 –

+0

問題はUIBezierPathをUIImageに変換しているので、この質問には関係しませんでした。しかし、スケールファクターについてのあなたのコメントは私が無視したものでした。何らかの理由で、スケールを1にしました。私は0にして、すべてが美しく見えました!ありがとう! :) –

関連する問題