gpt4 book ai didi

ios - 带有 CIFilters 的 CAShapeLayer

转载 作者:行者123 更新时间:2023-11-30 13:57:50 25 4
gpt4 key购买 nike

我想将 CIFilter 应用于 CAShapeLayer.filters。这是正确的假设如何做到这一点:

  • 创建 CAShapeLayer
  • 从 CAShapeLayer 创建 CGImage 或 UIImage
  • 使用 CGImage 或 UIImage 创建 CIFilter
  • 将 CIFilter 添加到 CAShapeLayer.filters

为了从 CAShapeLayer 创建 CGImage,我使用了 CAShapeLayer.contents,但在我的情况下,内容为零,而且如果我将 CAShapeLayer 渲染到图像上下文,我也无法获取图像。

override func layoutSubviews()
{
if(self.shapeLayer == nil && self.path != nil && self.pathOriginationSize != CGSizeZero)
{
let scaleFactor = self.scaleFactor(self.pathOriginationSize, targetSize: self.bounds.size)

_scaledPath = UIBezierPath(CGPath: self.path.CGPath)
_scaledPath.lineWidth = self.path.lineWidth
_scaledPath.applyTransform(CGAffineTransformMakeScale(scaleFactor.x, scaleFactor.y))
_scaledPath.lineCapStyle = CGLineCap.Round

self.shapeLayer = CAShapeLayer()
self.shapeLayer.path = _scaledPath.CGPath
self.shapeLayer.strokeColor = UIColor.blackColor().CGColor
self.shapeLayer.lineWidth = self.path.lineWidth

let imageSize = CGPathGetBoundingBox(_scaledPath.CGPath).size

UIGraphicsBeginImageContextWithOptions(imageSize, false, UIScreen.mainScreen().scale)
let context = UIGraphicsGetCurrentContext()
self.shapeLayer.renderInContext(context!)
_ = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

let cgImage = self.shapeLayer.contents as! CGImageRef

let inputImage = CIImage(CGImage: cgImage)

let blurFilter = CIFilter(name: "CIZoomBlur")
blurFilter?.setValue(inputImage, forKey: kCIInputImageKey)
blurFilter?.setDefaults()
self.shapeLayer.filters = [blurFilter!]
self.shapeLayer.shouldRasterize = true

self.layer.addSublayer(self.shapeLayer)
}
}

最佳答案

CALayer.filters 未在 iOS 上实现。

在这种情况下,无需使用 CAShapeLayer(因为您无法使用过滤器)。您可以从 UIBezierPath 创建一个 CGImage (正如您所做的那样;只需 lines 和/或 fill路径而不是调用 renderInContext )。然后使用应用CIFilter到结果,创建一个CGImage并将其分配给contents。 (从上面的代码来看,您似乎了解如何做所有这些事情,所以我不会在这里写出来。)

关于ios - 带有 CIFilters 的 CAShapeLayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com