我已经实现了一个用于图像编辑的组过滤器(GPUImageSepiaFilter,GPUImageExposureFilter,GPUImageSepiaFilter)。我有一个滑块用于设置自定义"曝光" (setExposure :)值。在" didValueChanged"滑块的动作方法,我通过调用"图片processImage"来刷新图像预览。如果我非常快地移动滑块或重复滚动滑块,应用程序会因内存问题而崩溃。
- (void)viewDidLoad {
[super viewDidLoad];
self.originalPicture = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"IMG_0009.JPG"]];
self.filterGroup = [[GPUImageFilterGroup alloc] init];
GPUImageSepiaFilter *sepiaFilter = [[GPUImageSepiaFilter alloc] init];
[self.filterGroup addFilter:sepiaFilter];
GPUImageExposureFilter *pixellateFilter = [[GPUImageExposureFilter alloc] init];
[pixellateFilter setExposure:0.0f];
[self.filterGroup addFilter:pixellateFilter];
GPUImageSaturationFilter *saturation = [[GPUImageSaturationFilter alloc] init];
[self.filterGroup addFilter:saturation];
[sepiaFilter addTarget:pixellateFilter];
[pixellateFilter addTarget:saturation];
[self.filterGroup setInitialFilters:[NSArray arrayWithObjects:sepiaFilter, pixellateFilter,nil]];
[self.filterGroup setTerminalFilter:saturation];
[self.originalPicture addTarget:self.filterGroup];
GPUImageView *filterView = [[GPUImageView alloc] init];
self.view = filterView;
[self.filterGroup addTarget:filterView];
[self.originalPicture processImage];
[self.slider setMinimumTrackTintColor:[UIColor redColor]];
[self.slider setMaximumTrackTintColor:[UIColor greenColor]];
[self.view addSubview:self.slider];
}
- (IBAction)didChangeValue:(id)sender {
GPUImageExposureFilter *filter = (GPUImageExposureFilter *)[self.filterGroup filterAtIndex:1];
[filter setExposure:self.slider.value];
[self.originalPicture processImage];
}
哪种方法可以解决这个问题?或者我做错了什么?
谢谢,
SRINIVAS
答案 0 :(得分:2)
我只是关于图像和GPUImage的一些建议:
height*width*n°channel*n°bit_for_each_channel
imageNamed
方法缓存图像,即使他们说这个内存会在内存压力情况下被驱逐,我也没有机会看到清除工作我在使用GPUImage时没有看到你的代码有什么问题,但我会尝试使用较小的图像(像素大小),首先使用分配。