Я пытаюсь создать фильтр смещения наклона согласно инструкциям Apple , но как только я пытаюсь получить outputImage
из фильтра CIAdditionCompositing, я получаю ошибку сегмента.Этот код я использую как расширение для UIImage.Что я делаю не так?
public func tiltShift() -> UIImage? {
guard let backingCi = ciImage ?? CIImage(image: self) else {
return nil
}
let blurred = backingCi.applyingGaussianBlur(sigma: 10)
var gradientParameters = [
"inputPoint0": CIVector(x: 0, y: 0.75 * size.height),
"inputColor0": CIColor(red: 0, green: 1, blue: 0, alpha: 1),
"inputPoint1": CIVector(x: 0, y: 0.5 * 10),
"inputColor1": CIColor(red: 0, green: 1, blue: 0, alpha: 0)
];
guard let inputGradient = CIFilter(name: "CILinearGradient", parameters: gradientParameters),
let inputImage = inputGradient.outputImage else {
return nil
}
gradientParameters["inputPoint0"] = CIVector(x: 0, y: 0.25 * size.height)
guard let backgroundGradient = CIFilter(name: "CILinearGradient", parameters: gradientParameters),
let backgroundImage = backgroundGradient.outputImage else {
return nil
}
let maskParameters = [
"inputImage": inputImage,
"inputBackgroundImage": backgroundImage
]
guard let mask = CIFilter(name: "CIAdditionCompositing", parameters: maskParameters),
let maskedImage = mask.outputImage else { // <=- This line aborts
return nil
}
let combinedParameters = [
"inputImage": blurred,
"inputBackgroundImage": self,
"inputMaskImage": maskedImage
]
guard let blend = CIFilter(name: "CIBlendWithMask", parameters: combinedParameters) else {
return nil
}
let context = CIContext(options: nil)
guard let blendImg = blend.outputImage,
let cgimg = context.createCGImage(blendImg, from: blendImg.extent) else { return nil }
return UIImage(cgImage: cgimg)
}