2017-08-19 4 views
-1

画像に現在の画面をキャプチャしたい。私はこれをやっている:UIGraphicsBeginImageContextが網膜画像を返さない

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.isOpaque, UIScreen.main.scale) 
self.view.drawHierarchy(in: self.view.bounds, afterScreenUpdates: false) 
let snapshot = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

問題はスケールパラメータです。私が正しく理解すれば0.0は非網膜を表し、2.0は網膜を表し、3.0は6 Plusおよび7 Plusの網膜を表す。スケールパラメータに何を入力しても、出力は常に375x667解像度の画像です。私はまた別のアプローチを試した:

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.isOpaque, UIScreen.main.scale) 
self.view.layer.render(in: UIGraphicsGetCurrentContext()!) 
let snapshot: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

再び同じシナリオ。私も実際には値2.0を返し

UIScreen.main.scale

を使用しています。私は間違って何をしていますか?より高い解像度の画像を取得するにはどうすればよいですか?

+0

実際、0.0は実際の画面のスケールを意味し、非網膜ではありません。それは1.0です。 – the4kman

+0

結果イメージの「サイズ」はどのようにして決定していますか? –

+0

「解像度」とはどういう意味ですか?異なるのはUIImageの「スケール」の結果だけです。サイズはピクセルではなくポイントで測定されます。それはすべてのスケールで同じです。 – matt

答えて

0

このコードは、トリック

let contextSize = CGSize(width: self.view.bounds.size.width * UIScreen.main.scale, height: self.view.bounds.size.height * UIScreen.main.scale) 

UIGraphicsBeginImageContextWithOptions(contextSize, self.view.isOpaque, UIScreen.main.scale) 
self.view.layer.render(in: UIGraphicsGetCurrentContext()!) 
let snapshot: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 
UIGraphicsEndImageContext() 

CGContextを行います、それが唯一のサイズを気に、規模を気にしないでください。

EDIT

あなたはiOSの10で利用できる新しいAPIを使用することもできますし、後で

let renderer = UIGraphicsImageRenderer(bounds: self.view.bounds) 

let snapshot = renderer.image(actions: { context in 
    self.view.layer.render(in: context.cgContext) 
}) 
+0

これはちょうどこれを行った:http://i.imgur.com/hKXsmkY。jpg(青はキャプチャされたスクリーンショットです) – MHCsk

+0

スケール** 0 **を目盛りとして試してみてください – Karim

+0

まだ同じです。 – MHCsk

0

は、スナップショットは二つの特性、sizescaleを持ってUIImageです。スクリーンによく似ています。画像の実際のサイズ(ピクセル単位)を決定するには、サイズにスケールを掛けなければなりません。あなたの問題は、サイズプロパティがピクセルではなくポイントであると仮定していると思います。

size
画像の論理的な寸法は、点で測定します。

あなたが精通している画像ツールを使用して検査するUIImageJPEGRepresentationを使用してJPGを作成し、それをディスクに保存することにより、非常に明確な方法でこれをテストすることができます。

0

問題は、あなたの期待が間違っていることです。あなたは解決が何であるか理解していません。 sizeは、1x画像、それに対応する2x画像、および対応する3x画像で同じです。違いは画像のscaleです。それを見ると、それが正しく変化していることがわかります。

あなた自身にこれを証明したい場合は、UIImageをCGImageに変換し、のサイズがであることを確認してください。これで、基礎となるビットマップの寸法を見ることができます。

関連する問題