Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cifilter 顺式顺式无规过滤器破裂_Cifilter - Fatal编程技术网

Cifilter 顺式顺式无规过滤器破裂

Cifilter 顺式顺式无规过滤器破裂,cifilter,Cifilter,我尝试对我的CIImage实现一些CI过滤器,其中一个一直崩溃。CISmoothLinearGradient给出了以下错误,但我无法理解它的错误。我试图做的是得到图像中的某些区域,并根据它们的平均颜色在它们之间创建平滑的线性渐变 错误代码: 原因:'[setValue:forUndefinedKey:]:此类不符合key inputImage的键值编码要求 有语法错误吗?请参阅下面我的代码: let ROIV1 = CGRect(x: 0, y: 55, widt

我尝试对我的CIImage实现一些CI过滤器,其中一个一直崩溃。CISmoothLinearGradient给出了以下错误,但我无法理解它的错误。我试图做的是得到图像中的某些区域,并根据它们的平均颜色在它们之间创建平滑的线性渐变

错误代码: 原因:'[setValue:forUndefinedKey:]:此类不符合key inputImage的键值编码要求

有语法错误吗?请参阅下面我的代码:

                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)))