如何使用 Core Graphics 编辑高分辨率图像?

How to edit high resolution images with Core Graphics?

我正在尝试在高分辨率图像上绘制一条路径,这对于 iPhone 来说并不复杂,但是如果我在我的路径上添加阴影,一切都会滞后。仅当我处理具有特定分辨率 (2000 x 3000) 甚至更小的图像时它才会滞后。

故事板 视图是:

-Scroll View
  -Image View
  -Draw View

所以当我需要绘制时,我将 DrawingView 放在 ImageView 之上。
因此 ImageView 和 DrawView (view.bounds.size) 具有与图像相同的分辨率(例如 2000 x 3000)(有问题)。
我正在绘制高分辨率的视图。

不是直接调用drawRect:而是在touchesBegan()touchesMoved()内部做一些操作后才调用setNeedsDisplay()path.moveToPointpath.addCurveToPoint、数组操作)并向我的数组添加点。

drawRect: 我基本上有:

override func drawRect(rect: CGRect) {
        print(self.bounds.size)
        UIColor.greenColor().setStroke()
        path.lineCapStyle = .Round
        path.lineJoinStyle = .Round
        path.lineWidth = 60.0
        context = UIGraphicsGetCurrentContext()!
        CGContextAddPath(context, path.CGPath)
        CGContextSetShadowWithColor(context, CGSizeZero, 14.0, UIColor.whiteColor().CGColor)  // <-- with this shadow it lags a lot.
        path.stroke()
    }

我的路径是 UIBezierPath().

有什么提高速度的想法吗?

更新: 我听从了@brimstone 所说的。我现在有分辨率较低的 ImageView,但必须将我绘制的路径应用于高分辨率图像。
(我正在尝试使用用户绘制的路径手动裁剪图像)
在这段代码中,我已经得到了我的封闭路径:

    let layer = CAShapeLayer()
    layer.path = path.CGPath
    self.imageToEditView.layer.mask = layer
    UIGraphicsBeginImageContext(self.imageEdited.size)
    self.imageToEditView.layer.renderInContext(UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    let croppedCGImage = CGImageCreateWithImageInRect(image.CGImage!, CGPathGetBoundingBox(path.CGPath))
    let croppedImage = UIImage(CGImage: croppedCGImage!)
    self.imageToEditView.image = croppedImage
    self.imageToEditView.layer.mask = nil

imageToEditView.bounds.size = 低分辨率
imageEdited.size = 高分辨率

当我 renderInContext 时,我需要设置高分辨率(我认为)。但是现在如何更改 imageView 的分辨率?

尝试将其缩小以供用户绘制(在小 iPhone 屏幕上不会对用户体验产生巨大影响),然后将编辑应用到高分辨率图像。

要缩小图像,请使用 UIImagePNGRepresentation,这可能会使您的图像足够小,或者(如果您仍然有内存问题),请尝试使用 this tutorial and this answer 中的技术使其均匀更小。

然后,您可以将他们绘制的内容应用到高分辨率图像中。

或者,查看 Apple 的高分辨率优化技术:https://developer.apple.com/library/ios/documentation/2DDrawing/Conceptual/DrawingPrintingiOS/SupportingHiResScreensInViews/SupportingHiResScreensInViews.html