部分截图和图像质量的损失
我正在打印相机胶卷,电子邮件,短信,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,则缩放系数将设置为设备主屏幕的缩放系数。
因此,上下文会自动检测屏幕的比例因子,并且在任何设备上运行该图像时,图像都会显示出来。