如何在 Swift 中正确传递 GPUImage ExposureAdjustment "exposure" 参数?

How to correctly pass GPUImage ExposureAdjustment "exposure" parameter in Swift?

我在 Swift 上与 GPUImage 斗争了几天,我认为是时候寻求帮助或至少寻求线索了。

我想做的是用 GPUImage 调整 NSImage 的曝光,但到目前为止我在这方面失败得很惨。

我的代码适用于像 SmoothToonFilter 这样的滤镜,但我似乎无法为 ExposureAdjustment 滤镜设置曝光参数...而且我不知道如何解决这个问题。

以下是 smoothSmoothToonFilter 的作用:

filteredImage = filteredImage?.filterWithOperation(GPUImage.SmoothToonFilter()

.. 而这不是:

filteredImage = filteredImage?.filterWithOperation(GPUImage.ExposureAdjustment() )

它也不接受我这样做:

filteredImage = filteredImage?.filterWithOperation(GPUImage.ExposureAdjustment(5.0) )

或者这样:

filteredImage = filteredImage?.filterWithOperation(GPUImage.ExposureAdjustment(exposure: 5.0) )

虽然 ExposureAdjustment.swift 在 GPUImage 项目中清楚地(对我来说,无论如何)表明有一种方法可以设置它…

public class ExposureAdjustment: BasicOperation {
    public var exposure:Float = 0.0 { didSet { uniformSettings["exposure"] = exposure } }
    
    public init() {
        super.init(fragmentShader:ExposureFragmentShader, numberOfInputs:1)
        
        ({exposure = 0.0})()
    }
}

我知道这个问题完全是我缺乏知识造成的,但我真的尝试自己解决这个问题,直到它让我发疯......我真的很感激你的帮助,所以我可以继续我的 Swift 实验...提前致谢!

这一行: public var exposure:Float... 表示 ExposureAdjustment class 上的 属性。您可以通过拆分过滤器的初始化并在新语句中设置来设置它。像这样:

let exposureFilter = GPUImage.ExposureAdjustment()
exposureFilter.exposure = 5.0
filteredImage = filteredImage?.filterWithOperation(exposureFilter)