我正在使用GPUImage在图像上应用滤镜和链式滤镜。我正在使用UISlider来更改滤镜的值,并随着滑块值的变化而将滤镜连续应用到图像上。这样,用户可以在更改值时看到什么输出。
这导致处理速度非常慢,有时在收到内存不足警告时UI挂起或事件应用程序崩溃。
如何使用GPUImage实现快速过滤器实现。我似乎有些应用随时随地应用过滤器,它们的UI甚至没有挂掉。
谢谢,
这是我用作滑块值更改的示例代码。
- (IBAction) foregroundSliderValueChanged:(id)sender{
float value = ([(UISlider *)sender maximumValue] - [(UISlider *)sender value]) + [(UISlider *)sender minimumValue];
[(GPUImageVignetteFilter *)self.filter setVignetteEnd:value];
GPUImagePicture *filteredImage = [[GPUImagePicture alloc]initWithImage:_image];
[filteredImage addTarget:self.filter];
[filteredImage processImage];
self.imageView.image = [self.filter imageFromCurrentlyProcessedOutputWithOrientation:_image.imageOrientation];
}
您尚未指定如何设置过滤器链,使用的过滤器或更新方式,因此很难提供除最通用的建议以外的所有建议。不过,这里是:
-forceProcessingAtSize:
或-forceProcessingAtSizeRespectingAspectRatio:
将其分辨率降低到GPUImageView的输出分辨率。这将使您的滤镜在通常比全分辨率源图像小很多倍的图像帧上运行。没有理由处理您永远不会看到的像素。然后,当您最终需要将全分辨率图像捕获到磁盘时,可以将0大小传递给这些相同的方法。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句