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

问题描述

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

GPUImage项目中的ExposureAdjustment.swift清楚地(无论如何对我来说)表明有一种设置方法……

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类的属性。您可以通过拆分过滤器的初始化并在新语句中进行设置来进行设置。像这样:

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