我正在使用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];
}
Run Code Online (Sandbox Code Playgroud)
您尚未指定设置过滤器链的方式,使用的过滤器或更新方式,因此很难提供除最通用的建议之外的所有建议.不过,这里有:
-forceProcessingAtSize:或-forceProcessingAtSizeRespectingAspectRatio:在链中的第一个过滤器上将其分辨率降低到GPUImageView的输出分辨率.这将使您的滤镜在通常比全分辨率源图像小许多倍的图像帧上运行.没有理由处理你永远不会看到的像素.然后,当您需要最终将全分辨率图像捕获到磁盘时,可以将0大小传递给这些相同的方法.| 归档时间: |
|
| 查看次数: |
1368 次 |
| 最近记录: |