无法降低使用UISlider的CIVignette效果
问题描述:
我已经使用CIVignette
效果为My Photo Editing应用程序。它基于Slider的Changing事件应用。我已经使用下面的代码,我的问题是每当我增加滑块的值Vignette效果出现,但每当我减少滑块的值,Vignette效果不会减少。
请帮忙。无法降低使用UISlider的CIVignette效果
@IBAction func slider(_ sender: UISlider) {
let startImage = CIImage(image: imgEdited!)!
let vignetteFilter = CIFilter(name: "CIVignette")!
let radius = 5
vignetteFilter.setValue(startImage, forKey:kCIInputImageKey)
vignetteFilter.setValue(sender.value, forKey:"inputIntensity")
vignetteFilter.setValue(radius, forKey:"inputRadius")
let filteredImageData = vignetteFilter.value(forKey: kCIOutputImageKey) as! CIImage
let filteredImageRef = self.context.createCGImage(filteredImageData, from: filteredImageData.extent)
imgImage.image = UIImage.init(cgImage: filteredImageRef!)
self.imgEdited = imgImage.image
}
答
下面的代码基于我的回答对其他SO
后Blur effect using slider Is not working properly。
@IBAction func slider(_ sender: UISlider) {
let startImage = CIImage(image: UIImage(named: "Your Image Name")!) // You should initialise your UIImage here not UIImageView
let vignetteFilter = CIFilter(name: "CIVignette")!
vignetteFilter.setValue(startImage, forKey:kCIInputImageKey)
vignetteFilter.setValue(sender.value, forKey:kCIInputIntensityKey)
vignetteFilter.setValue(5, forKey:kCIInputRadiusKey)
let filteredImageData = vignetteFilter.value(forKey: kCIOutputImageKey) as! CIImage
let filteredImageRef = self.context.createCGImage(filteredImageData, from: filteredImageData.extent)
self.imgView.image = UIImage.init(cgImage: filteredImageRef!) // Output
}
从辛输出:
这是否能顺利执行?为什么不使用'GLKView'和单个'CIContext'?通过这种方式,您可以使用GPU,并可以在GLKView中渲染* current * CIImage,并在共享/保存时输出“UIImage”。我猜你会看到性能增加5-10倍。 (当然,在模拟器中你会看到几乎相同或更多的下降,但是尽可能利用这些GPU。) – dfd
感谢您的评论@dfd。但是,'SO'在另一篇相关的文章中指出他不使用'GLKView'。 – Joe
谢谢。仍然 - 表现如何?我发现动态使用滑块来改变“CIFilter”,并创建一个“UIImage”......非常结构。从我在输出示例中看到的情况来看,情况就是这样。 – dfd