【问题标题】:Partial screenshot & loss of image quality部分截图和图像质量损失
【发布时间】:2016-02-03 16:30:20
【问题描述】:

我正在打印相机胶卷、电子邮件、短信、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 倍

这似乎给了我一个更清晰/质量更好的部分截图,尽管图像比我预期的要大。

我可以应用其他可能更合适的解决方案吗?

谢谢!

【问题讨论】:

    标签: ios swift image screenshot scale


    【解决方案1】:

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

    因此,您希望使用UIGraphicsBeginImageContextWithOptions(),正如您所说的那样,但不要传递2.0 作为比例尺(适用于2x 显示器,但不适用于其他显示器),而是传递0.0

    As the documentation says for the scale argument:

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

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

    【讨论】:

    • 太棒了!非常感谢!对于一个菜鸟(比如我自己),我自然会认为UIGraphicsBeginImageContext(size)UIGraphicsBeginImageContextWithOptions() 的结果以及使用0.0 以便根本不扩展,会产生相同的结果。显然不是。 Terima kasih 先生/女士!
    • 没问题!是的,UIGraphicsBeginImageContext() 默认使用1.0 的比例,这是 Core Graphics 的众多怪癖之一;)
    猜你喜欢
    • 1970-01-01
    • 2012-10-08
    • 2012-06-22
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2014-03-22
    相关资源
    最近更新 更多