通过在gpuimage2中的滑块控件将亮度从0改变到100的过滤器亮度swift

问题描述:

我遵循GPUImage2例子中改变视频摄像机上滤镜亮度的示例,我试图用iOS滑块控件更改静态图像上的滤镜亮度,但它并没有改变强度。通过在gpuimage2中的滑块控件将亮度从0改变到100的过滤器亮度swift

@IBOutlet weak var renderView: RenderView! 
    var filterContrast:ContrastAdjustment! 
    @IBOutlet weak var sliderContrast: UISlider! 
    let inputImage = UIImage(named:"WID-small.jpg")! 
    var picture:PictureInput! 

    // setting dynamic observable property. 
    dynamic var filterValue = 3.0 { 

    didSet { 
     filterContrast.contrast = GLfloat(filterValue) 
     picture.processImage() 
    } 
} 

上滑块更新viewDidLayoutSubviews

picture = PictureInput(image: inputImage) 
    filterContrast = ContrastAdjustment(); 

    picture --> filterContrast --> renderView 
    filterValue = 3; // will call did set property and call processimage from it 

 filterValue = Double(nm); 

有什么事情不对,这种方法?

感谢

您的每一次滑块值发生变化,你要创建一个新的ContrastAdjustment过滤器实例,并将其连接到的画面。您的旧过滤器实例仍然存在,并且RenderView将忽略超出第一个输入的任何输入。事实上,你应该已经看到了控制台上的警告,告诉你这个事实,即你将过多的输入添加到RenderView。

不是每次都创建一个全新的ContrastAdjustment滤镜,只需将对比滤镜保存为实例变量并在滑块更改时调整其属性。

+0

嗨,布拉德,感谢您的回应,尝试过任何一种方式,但图像并没有改变一些调试的强度,我发现当从滑块更改值时,targetcontainer计数为零。 但当我再次添加目标时, self.picture - > self.filterContrast - > self.renderView滑块更新方法 我面临以下错误: 警告:尝试添加目标超出目标的输入容量 - > Pipeline.swift:addTarget(_:atTargetIndex :):43 PS:我现在只是更新属性的对比值。 –

+0

我更新了我的问题,以便更好地解释您的问题。 –

+0

@MuhammadFaizanKhatri - 删除'picture - > filterContrast - > renderView'这一行,因为不需要再次设置处理管道,如果您尝试这样做会产生错误。你上面的代码仍然在创建一个新的ContrastAdjustment实例,所以你没有显示你当前的代码。如果您正在访问作为实例变量存储的ContrastAdjustment,并且这是作为过滤器链的一部分添加的ContrastAdjustment实例,则上述内容应该可以工作。查看SimpleImageFilter Mac应用程序的工作原理。 –