【发布时间】:2022-05-04 14:27:47
【问题描述】:
过去几天我一直在寻找如何通过手动操作亮度、对比度、高光、阴影、暖度等来实现对UIImage 的过滤器。使用UISlider?
这是我目前用于调整亮度的代码..
let currentValue = Int(editPictureView.sliderView.value)
editPictureView.currentPropertyValue.text = String(currentValue) + " "
brightnessFilter.setValue(NSNumber(value: editPictureView.sliderView.value), forKey: "inputBrightness")
outputImage = brightnessFilter.outputImage!
//let imageRef = context.createCGImage(outputImage, from: outputImage.extent)
newUIImage = UIImage(ciImage: outputImage)
editPictureView.selectedImageToEdit.image = newUIImage;
但我收到一条错误消息,指出它在展开时发现了 nil。
我所要求的只是让你分享你第一次解决这个问题时的感受,如果你能解释它,你自己也会更好地理解它,或者至少像故事那样。
但老实说,提前谢谢你。
【问题讨论】:
-
brightnessFilter是什么?请在问题中包含其声明。此外,永远不要使用强制解包选项,除非你 100% 解包它们时它们将具有非零值。 -
到目前为止,最有效的方法——尤其是性能——是使用 (1) 三个单独的滑块,每个滑块用于亮度、饱和度和对比度,(2) 使用 CoreImage CIColorControls (@987654322 @) 和 (3) 使用使用 GPU 的
GLKView显示 CIImage 输出。上面的链接对关于内存消耗的答案有评论,使用UIImage或任何与 UIKit 相关的东西都会受到性能不佳的影响。
标签: swift uislider cifilter ciimage