将过滤器添加到CIIMAGE



i创建用于使用图像的应用程序,但我遇到了一个问题。我无法将过滤器添加到照片中,也不知道如何解决此问题。

我写了自己的班级以与ciimage一起工作:

import CoreImage
typealias Filter = (CIImage) -> ()
typealias ParametersFilter = Dictionary<String, AnyObject>
public protocol PXImageDelegate {
   func updateImage(picker: PXImage)
}
public class PXImage: CIImage {
public var delegate: PXImageDelegate?
open var brightness: Float = 0 {
    willSet (value) {
        brightness = value
        brightness(value)(self)
        updateImage()
    }
}
open var contrast: Float = 1 {
    willSet (value) {
        contrast = value
        contrast(value)(self)
        updateImage()
    }
}
open var saturation: Float = 1 {
    willSet (value) {
        saturation = value
        saturation(value)(self)
        updateImage()
    }
}
private func brightness(_ value: Float) -> Filter {
    return { image in
        let parameters: ParametersFilter = [
            kCIInputBrightnessKey: value as AnyObject,
            kCIInputImageKey: image
        ]
        self.applyingFilter("CIColorControls", parameters: parameters)
    }
}
private func contrast(_ value: Float) -> Filter {
    return { image in
        let parameters: ParametersFilter = [
            kCIInputContrastKey: value as AnyObject,
            kCIInputImageKey: image
        ]
        self.applyingFilter("CIColorControls", parameters: parameters)
    }
}
private func saturation(_ value: Float) -> Filter {
    return { image in
        let parameters: ParametersFilter = [
            kCIInputSaturationKey: value as AnyObject,
            kCIInputImageKey: image
        ]
        self.applyingFilter("CIColorControls", parameters: parameters)
    }
}
func updateImage() {
    delegate?.updateImage(picker: self)
}

但是,当我更改亮度,对比度和饱和的值时,什么都不会发生。图片仍然是静态的。为什么会发生这种情况?

首先,查看ciimage.applyingfilter的方法签名。这不是一种突变方法;它返回新的ciimage。其次,CIIMAGE的工作方式是它基本上存储图像 滤镜的着色器指令。它实际上不会编译和执行着色器,直到您要么暗中(例如,通过转换为uiimage)或明确创建Cicontext。我无法判断您是否正在这样做,因为我可以看到您的代码。在任何情况下,您都应该在一个由您的参数控制的输入链链中。然后,您只需在更改任何参数时重新评估过滤器。

相关内容

  • 没有找到相关文章

最新更新