Cifilter 顺式顺式无规过滤器破裂
我尝试对我的CIImage实现一些CI过滤器,其中一个一直崩溃。CISmoothLinearGradient给出了以下错误,但我无法理解它的错误。我试图做的是得到图像中的某些区域,并根据它们的平均颜色在它们之间创建平滑的线性渐变 错误代码: 原因:'[setValue:forUndefinedKey:]:此类不符合key inputImage的键值编码要求 有语法错误吗?请参阅下面我的代码:Cifilter 顺式顺式无规过滤器破裂,cifilter,Cifilter,我尝试对我的CIImage实现一些CI过滤器,其中一个一直崩溃。CISmoothLinearGradient给出了以下错误,但我无法理解它的错误。我试图做的是得到图像中的某些区域,并根据它们的平均颜色在它们之间创建平滑的线性渐变 错误代码: 原因:'[setValue:forUndefinedKey:]:此类不符合key inputImage的键值编码要求 有语法错误吗?请参阅下面我的代码: let ROIV1 = CGRect(x: 0, y: 55, widt
let ROIV1 = CGRect(x: 0, y: 55, width: (histogramImage?.size.width)!, height: 5)
let ROIV2 = CGRect(x: 0, y: 60, width: (histogramImage?.size.width)!, height: 5)
let newPic1 = maskCI!.cropped(to: ROIV1)
let newPic1UI = maskEdit.convert(cmage: newPic1)
let newPic2 = maskCI!.cropped(to: ROIV2)
let newPic2UI = maskEdit.convert(cmage: newPic2)
let average1 = newPic1UI.averageColor
let average2 = newPic2UI.averageColor
maskCI = maskCI?.applyingFilter("CISmoothLinearGradient", parameters: ["inputPoint0" : CIVector(x:0,y:50), "inputPoint1": CIVector(x: 299,y:65),"inputColor0": CIColor(color: average1!),"inputColor1": CIColor(color: average2!)])
maskCI = maskCI?.applyingFilter("CIExposureAdjust", parameters: ["inputEV": 0.04] )
CISmoothLinearGradient
不需要输入图像(因此没有具有该名称的属性)。看见它是一个生成器,这意味着它将从头开始生成一个新图像(在本例中为颜色渐变)
方法ciImage.applyingFilter(“,参数:[])
是以下内容的快捷方式:
let filter = CIFiter(name: "<name>")
filter.setValue(ciImage, forKey: "inputImage")
filter.setValuesForKeys([<params>])
return filter.outputImage
或者,如果您仅支持iOS 13并且更喜欢类型安全版本:
import CoreImage.CIFilterBuiltins
let filter = CIFilter.smoothLinearGradient()
filter.color0 = CIColor(color: average1!)
filter.color1 = CIColor(color: average2!)
filter.point0 = CGPoint(x: 0, y: 50)
filter.point1 = CGPoint(x: 299, y: 65)
let gradient = filter.outputImage
请注意,生成的图像将具有(实际上)无限的范围(它在所有方向上无限生成)。这通常是你想要的,当你以后用它来混合的时候。但是,如果您需要一定的尺寸,您可以根据需要裁剪:
let croppedGradient = gradient.cropped(to: CGRect(origin: .zero, size: CGSize(width: 500, height: 500)))
好的,谢谢。我没有意识到这一点。但是如何使用CismoothlineArgent生成新图像?我找不到任何显示如何使用此筛选器的示例代码。我可以设置参数,但无法生成outputImage。非常感谢。第二种选择效果很好。我很好奇如何使用过滤器作为无限范围。当我尝试将渐变与我的CI图像混合时,它崩溃了。我猜下面的注释不适用于无限CIimage var trialImage=blendKernel.apply(前景:maskCI!,背景:gradenti!),该
blendKernel
的输出也将具有无限的范围。您基本上是将图像(maskCI
)放置在无限大的壁纸(gradient
)上。因此,在渲染结果之前,您需要在某个点对其进行裁剪,因为您的渲染目标将是有限的,并且您需要告诉核心图像要显示无限图像的哪一部分。好的,我现在明白了。我的错误是将混合内核的结果转换为UIimage并尝试显示它。非常感谢
let croppedGradient = gradient.cropped(to: CGRect(origin: .zero, size: CGSize(width: 500, height: 500)))