我正在使用以下代码来应用图像过滤器。这在按比例缩小的图像上效果很好。但是当我在全分辨率图像上应用超过 2 个过滤器时,应用程序会崩溃。收到内存警告。
当我打开“分配”工具时,我看到 CFData(store) 占用了程序使用的大部分内存。当我在全分辨率图像上应用超过 2 个过滤器时,“总字节数”高达 54MB。虽然当我用眼睛观察这些数字时,“活动字节”似乎没有超过 12MB,但峰值表明活动字节也达到了这个数字并回来了。
我哪里错了?
- (UIImage *)editImage:(UIImage *)imageToBeEdited tintValue:(float)tint
{
CIImage *image = [[CIImage alloc] initWithImage:imageToBeEdited];
NSLog(@"in edit Image:\ncheck image: %@\ncheck value:%f", image, tint);
[tintFilter setValue:image forKey:kCIInputImageKey];
[tintFilter setValue:[NSNumber numberWithFloat:tint] forKey:@"inputAngle"];
CIImage *outputImage = [tintFilter outputImage];
NSLog(@"check output image: %@", outputImage);
return [self completeEditingUsingOutputImage:outputImage];
}
- (UIImage *)completeEditingUsingOutputImage:(CIImage *)outputImage
{
CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent];
NSLog(@"check cgimg: %@", cgimg);
UIImage *newImage = [UIImage imageWithCGImage:cgimg];
NSLog(@"check newImge: %@", newImage);
CGImageRelease(cgimg);
return newImage;
}
编辑:我也尝试将 cgimg 设为 nil。没有帮助。我尝试将上下文声明和定义放在第二个函数中。没有帮助。我试图在函数内移动过滤器的声明和定义,但没有帮助。
AlsoCrash 发生在
CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent];