Мне нужен совет по эффективному использованию CIFilter в памяти. В принципе, я соединяю два фильтра вместе. Сложная часть - мне нужно сначала преобразовать UIImage в CIImage, прежде чем вызывать фильтры. Код размещен ниже:CIFilters вызвало приложение к сбою
CIImage *foreground = [CIImage imageWithCGImage:first.CGImage options:nil];
CIImage *background = [CIImage imageWithCGImage:second.CGImage options:nil];
CIFilter *softLightBlendFilter = [CIFilter filterWithName:@"CISoftLightBlendMode"];
[softLightBlendFilter setDefaults];
[softLightBlendFilter setValue:foreground forKey:kCIInputImageKey];
[softLightBlendFilter setValue:background forKey:kCIInputBackgroundImageKey];
CIImage *result = [softLightBlendFilter outputImage];
foreground = nil;
background = nil;
softLightBlendFilter = nil;
CIFilter *gammaAdjustFilter = [CIFilter filterWithName:@"CIGammaAdjust"];
[gammaAdjustFilter setDefaults];
[gammaAdjustFilter setValue:result forKey:kCIInputImageKey];
[gammaAdjustFilter setValue:[NSNumber numberWithFloat:value] forKey:@"inputPower"];
result = [gammaAdjustFilter valueForKey:kCIOutputImageKey];
gammaAdjustFilter = nil;
CIContext *context = [CIContext contextWithOptions:nil];
CGRect extent = [result extent];
CGImageRef cgImage = [context createCGImage:result fromRect:extent];
UIImage *image = [UIImage imageWithCGImage:cgImage scale:1.0 orientation:first.imageOrientation];
CFRelease(cgImage);
result = nil;
return image;
И этот код легко снимает память до 200Мб, что вызовет приложение к краху.
Так что я делаю неправильно? Как я могу это исправить?
Спасибо PEKO, загрузка изображения из файла URL вместо image.CGImage значительно уменьшил площадь памяти. Мне интересно, что здесь творится, не загрузил ли образ данных imageWithContentOfURL? –
Привет, peko, у меня все еще такая же проблема на iPhone 4S, строка: CIImage * foreground = [CIImage imageWithContentsOfURL: [NSURL fileURLWithPath: first] options: nil]; мгновенно дает мне предупреждение о памяти и приводит к сбою приложения ... –