我使用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];
}发布于 2014-06-06 17:51:05
您尚未指定如何设置筛选链、使用了哪些筛选器或如何进行更新,因此很难提供所有的建议,只有最通用的建议。尽管如此,这里:
-forceProcessingAtSize:或-forceProcessingAtSizeRespectingAspectRatio:,将其分辨率降低到GPUImageView的输出分辨率。这将导致您的过滤器操作的图像帧,通常是许多倍,比您的全分辨率源图像。没有理由去处理你永远看不到的像素。然后,当您需要最终将全分辨率映像捕获到磁盘时,可以将0大小传递给这些相同的方法。https://stackoverflow.com/questions/24077461
复制相似问题