部分截图和图像质量下降

Pau*_*tas 0 screenshot image scale ios swift

我正在为相机胶卷,电子邮件,短信,FB,Twitter等打印部分屏幕截图...部分屏幕选择 - 顶部100像素,底部100像素.

我使用以下代码:

let top: CGFloat = 100
let bottom: CGFloat = 100

let size = CGSize(width: view.frame.size.width, height: view.frame.size.height - top - bottom)

UIGraphicsBeginImageContext(size)

let context = UIGraphicsGetCurrentContext()!

CGContextTranslateCTM(context, 0, -top)

view.layer.renderInContext(context)

let snapshot = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

UIImageWriteToSavedPhotosAlbum(snapshot, nil, nil, nil)
Run Code Online (Sandbox Code Playgroud)

结果截图质量很差.

我研究了几个小时,发现有几个人有类似的问题.我不能完全理解为我的问题修改解决方案.

我确实设法找到了一个半修复程序.我变了:

UIGraphicsBeginImageContext(size)
Run Code Online (Sandbox Code Playgroud)

UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,true,2.0)
Run Code Online (Sandbox Code Playgroud)

这实际上是我的截图缩放了2.0倍

这似乎给我一个更清晰/更好质量的部分截图,虽然图像比我想象的大.

我可以申请哪种解决方案可能更合适吗?

谢谢!

Ham*_*ish 7

问题在于UIGraphicsBeginImageContext()创建一个具有比例尺的图像上下文1.0,但是您的图层(因为它在屏幕上显示)具有相当于设备屏幕比例的比例 - 这很可能高于1.0.

因此,您希望UIGraphicsBeginImageContextWithOptions()按照正确的说法使用,但不是2.0为了缩放(它将在2x显示器上工作,而不在其他显示器上工作),而是传递0.0.

正如文档所说的那样scale:

要应用于位图的比例因子.如果指定值0.0,则比例因子将设置为设备主屏幕的比例因子.

因此,当您执行此操作时,上下文将自动检测屏幕的比例因子,并且图像将在您运行它的任何设备上显得清晰明了.