部分截图和图像质量的损失

我正在打印相机胶卷,电子邮件,短信,FB,Twitter等部分屏幕截图…部分屏幕select – 从顶部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) 

由此产生的截图质量差。

我研究了几个小时,发现有几个人也有类似的问题。 在我的问题上,我不能根据自己的想法修改解决scheme。

我设法find了一个半修复。 我变了:

 UIGraphicsBeginImageContext(size) 

 UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,true,2.0) 

从本质上来说,我的屏幕截图按照2.0的倍数放大

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

有没有另一种解决办法可以适用?

谢谢!

问题是UIGraphicsBeginImageContext()会创build一个比例为1.0的图像上下文,但是您的图层(在屏幕上显示时)具有与设备的屏幕比例相当的比例 – 最可能高于1.0

因此,您想正确地使用UIGraphicsBeginImageContextWithOptions() ,而不是传递2.0 (即在两个显示器上工作,但不在其他人上)传递0.0

正如文件所说的scale论证:

适用于位图的比例因子。 如果您指定的值为0.0,则缩放系数将设置为设备主屏幕的缩放系数。

因此,上下文会自动检测屏幕的比例因子,并且在任何设备上运行该图像时,图像都会显示出来。