部分屏幕截图和图像质量损失
Partial screenshot & loss of image quality
我正在打印相机胶卷、电子邮件、短信、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)
生成的屏幕截图质量很差。
我研究了几个小时,发现有几个人有类似的问题。我无法完全理解针对我的问题修改提供给他们的解决方案。
我确实设法找到了半修复。我改变了:
UIGraphicsBeginImageContext(size)
到
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,true,2.0)
基本上将我的屏幕截图放大了 2.0 倍
这似乎给了我一个 sharper/better 质量的部分屏幕截图,尽管图像比我预期的要大。
是否有其他更适合我的解决方案?
谢谢!
问题是 UIGraphicsBeginImageContext()
创建了比例为 1.0
的图像上下文,但是您的图层(在屏幕上显示时)的比例等于设备屏幕的比例 –这很可能高于 1.0
.
因此,您希望按照您正确的说法使用 UIGraphicsBeginImageContextWithOptions()
,而不是传递 2.0
作为比例(这将适用于 2x 显示器,但不适用于其他显示器),传递 0.0
.
As the documentation says for the scale
argument:
The scale factor to apply to the bitmap. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen.
上下文因此会在您执行此操作时自动检测屏幕的比例因子,并且图像在您 运行 所用的任何设备上都会呈现出漂亮清晰的效果。
我正在打印相机胶卷、电子邮件、短信、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)
生成的屏幕截图质量很差。
我研究了几个小时,发现有几个人有类似的问题。我无法完全理解针对我的问题修改提供给他们的解决方案。
我确实设法找到了半修复。我改变了:
UIGraphicsBeginImageContext(size)
到
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size,true,2.0)
基本上将我的屏幕截图放大了 2.0 倍
这似乎给了我一个 sharper/better 质量的部分屏幕截图,尽管图像比我预期的要大。
是否有其他更适合我的解决方案?
谢谢!
问题是 UIGraphicsBeginImageContext()
创建了比例为 1.0
的图像上下文,但是您的图层(在屏幕上显示时)的比例等于设备屏幕的比例 –这很可能高于 1.0
.
因此,您希望按照您正确的说法使用 UIGraphicsBeginImageContextWithOptions()
,而不是传递 2.0
作为比例(这将适用于 2x 显示器,但不适用于其他显示器),传递 0.0
.
As the documentation says for the scale
argument:
The scale factor to apply to the bitmap. If you specify a value of 0.0, the scale factor is set to the scale factor of the device’s main screen.
上下文因此会在您执行此操作时自动检测屏幕的比例因子,并且图像在您 运行 所用的任何设备上都会呈现出漂亮清晰的效果。