我已經實現了用於圖像編輯的組過濾器(GPUImageSepiaFilter,GPUImageExposureFilter,GPUImageSepiaFilter)。我有一個滑塊,用於設置自定義「曝光」(setExposure :)值。在滑塊的「didValueChanged」操作方法中,我通過調用「picture processImage」來刷新圖像預覽。如果我非常快地移動滑塊或者反覆滾動滑塊,由於內存問題,應用程序肯定會崩潰。重複調用「GPUImagePicture 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
像素的大小? – Andrea
@Andrea:圖片大小應該是743KB到2.5MB。 – Srinivas
以像素爲單位的大小,不是字節... ;-)它可能會在圖像處理方面造成很大的差異。在內存中解壓縮的圖像是高度*寬度* n°通道* n°bit_for_each_channel – Andrea