应用核心图像过滤器 - 应用程序崩溃

时间:2012-09-04 11:31:57

标签: objective-c ios crash core-image

我使用以下代码来应用几种类型的图像过滤器。 (还有三个'editImage'功能用于亮度,饱和度和对比度,使用常见的completeImageUsingOutput方法)。我使用滑块来改变它们的值。 如果我单独使用它们中的任何一个,它工作正常。一旦我在两个不同的过滤器上进行了两次函数调用,应用程序就崩溃了。

编辑: didReceiveMemoryWarning被调用。我看到内存分配使用内存泄漏工具,并在每次编辑内存分配后增加约15mb

坠毁发生在     CGImageRef cgimg = [context createCGImage:outputImage fromRect:outputImage.extent];

此外,如果将指令completeImageUsingOutputImage方法放入各个函数中,我可以使用两种类型的过滤器而不会崩溃。一旦我打电话给第三个,应用程序崩溃了。

(过滤器和上下文已被声明为实例变量并在init方法中初始化)

- (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;
}

编辑:在尺寸缩小的图片上使用这些过滤器现在正在运行,但是,如果我之前没有释放某些内存,那将会很好。

1 个答案:

答案 0 :(得分:1)

将此行添加到completeEditingUsingOutputImage:method

的最顶层
    CIContext *context = [CIContext contextWithOptions:nil];

这也是获取CIImage的方法:

    CIImage *outputImage = [tintFilter valueForKey:@"outputImage"];