通过在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滤镜,只需将对比滤镜保存为实例变量并在滑块更改时调整其属性。
嗨,布拉德,感谢您的回应,尝试过任何一种方式,但图像并没有改变一些调试的强度,我发现当从滑块更改值时,targetcontainer计数为零。 但当我再次添加目标时, self.picture - > self.filterContrast - > self.renderView滑块更新方法 我面临以下错误: 警告:尝试添加目标超出目标的输入容量 - > Pipeline.swift:addTarget(_:atTargetIndex :):43 PS:我现在只是更新属性的对比值。 –
我更新了我的问题,以便更好地解释您的问题。 –
@MuhammadFaizanKhatri - 删除'picture - > filterContrast - > renderView'这一行,因为不需要再次设置处理管道,如果您尝试这样做会产生错误。你上面的代码仍然在创建一个新的ContrastAdjustment实例,所以你没有显示你当前的代码。如果您正在访问作为实例变量存储的ContrastAdjustment,并且这是作为过滤器链的一部分添加的ContrastAdjustment实例,则上述内容应该可以工作。查看SimpleImageFilter Mac应用程序的工作原理。 –