从GraphicContext绘制图像时,图像变得模糊?

6
我在故事板中创建了一个带有UIImageView的ViewController。ImageView设置为“Aspect Fit”并获得黄色背景颜色。
这是我用于测试的照片
当我运行我的应用程序时,下面显示了图像:

enter image description here

没问题。图片看起来很清晰。现在我在我的viewDidLoad方法中执行了以下操作:

  @IBOutlet weak var imageView: UIImageView!

  override func viewDidLoad() {
    super.viewDidLoad()

    UIGraphicsBeginImageContext(imageView.image!.size)
    imageView.image!.drawInRect(CGRectMake(0, 0, imageView.image!.size.width, imageView.image!.size.height))

    var drawedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    imageView.image = drawedImage
  }

这是结果:

enter image description here

从图形上下文中绘制图像后,它看起来比以前模糊得多。
如何防止图像在从图形上下文绘制回来时变得模糊?

尝试使用UIGraphicsBeginImageContextWithOptions。请参见https://dev59.com/s2855IYBdhLWcg3wcz_y。 - user467105
1个回答

18

可能的问题在于,图像的CGSize返回的是点的大小,而不是像素。视网膜屏幕(所有仍在销售的iDevice屏幕)每个点有多个像素。

尝试乘以屏幕缩放因子或将其设置为0以自动确定(默认值为1):

@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
   super.viewDidLoad()

   UIGraphicsBeginImageContext(imageView.image!.size, imageView.opaque, 0.0)

   imageView.image!.drawInRect(CGRectMake(0, 0, imageView.image!.size.width, imageView.image!.size.height))

   var drawedImage = UIGraphicsGetImageFromCurrentImageContext()
   UIGraphicsEndImageContext()
   imageView.image = drawedImage
}

您是指使用UIGraphicsBeginImageContextWithOptions(imageView.image!.size, false, 0.0),还是应该将宽度和高度乘以屏幕比例? - Michael
第一个 :) 编辑答案以展示一个例子 - Kevin R
对我有用,谢谢 :) - Purnendu roy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接