部分屏幕截图和图像质量损失

2024-01-04

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

to

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

这基本上将我的屏幕截图放大了 2.0 倍

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

我可以应用另一种可能更合适的解决方案吗?

Thanks!


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

因此你想使用UIGraphicsBeginImageContextWithOptions()正如你所说,但不是通过2.0对于比例(适用于 2x 显示器,但不适用于其他显示器),传递0.0.

正如文档所说scale争论: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIKitFunctionReference/#//apple_ref/c/func/UIGraphicsBeginImageContextWithOptions

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

部分屏幕截图和图像质量损失 的相关文章

随机推荐