首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPUImage性能

GPUImage性能
EN

Stack Overflow用户
提问于 2014-06-06 08:33:48
回答 1查看 1.4K关注 0票数 0

我使用GPUImage在图像上应用过滤器和链式过滤器。我使用UISlider来更改过滤器的值,并在滑块的值变化时不断地在图像上应用过滤器。这样,当用户更改值时,就可以看到输出是什么。

这导致处理非常缓慢,有时UI挂起或事件应用程序在接收到低内存警告时崩溃。

如何使用GPUImage实现快速过滤。我似乎有一些应用程序,正在应用过滤器,他们的UI甚至没有挂在第二。

谢谢,

下面是示例代码,我使用它作为滑块的值更改。

代码语言:javascript
复制
- (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];


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 17:51:05

您尚未指定如何设置筛选链、使用了哪些筛选器或如何进行更新,因此很难提供所有的建议,只有最通用的建议。尽管如此,这里:

  • 如果处理要显示到屏幕上的图像,请不要使用UIImageView。转换到和从一个UIImage是一个非常缓慢的过程,一个不应用于任何活动的实时更新。相反,go GPUImagePicture -> filters -> GPUImageView。这将图像保存在GPU上,并且在处理和内存方面要高效得多。
  • 只处理实际显示的像素数。在链中的第一个过滤器上使用-forceProcessingAtSize:-forceProcessingAtSizeRespectingAspectRatio:,将其分辨率降低到GPUImageView的输出分辨率。这将导致您的过滤器操作的图像帧,通常是许多倍,比您的全分辨率源图像。没有理由去处理你永远看不到的像素。然后,当您需要最终将全分辨率映像捕获到磁盘时,可以将0大小传递给这些相同的方法。
  • 寻找更有效的方法来设置您的过滤器链。如果您有一组常见的简单操作,您可以一次又一次地应用到图像中,请考虑创建一个自定义着色器,酌情将这些操作组合在一起。昂贵的操作有时也有一个更便宜的替代品,比如我如何使用下采样-然后-上采样通行证GPUImageiOSBlur使用一个比我对股票GPUImageGaussianBlur的模糊半径要小得多。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24077461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档