【问题标题】:Applying core image filters - app crashes应用核心图像过滤器 - 应用程序崩溃
【发布时间】:2012-09-04 11:31:57
【问题描述】:

我使用以下代码来应用几种类型的图像过滤器。 (还有另外三个用于亮度、饱和度和对比度的 '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;
}

编辑:在缩小尺寸的图像上使用这些过滤器现在可以工作,但是,如果我为什么以前没有释放一些内存,那就太好了。

【问题讨论】:

标签: objective-c ios crash core-image


【解决方案1】:

在 completeEditingUsingOutputImage: 方法的最顶部添加这一行

    CIContext *context = [CIContext contextWithOptions:nil];

这也是获取 CIImage 的方法:

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

【讨论】:

  • 我尝试了这两种方法,但都没有成功。 (看到我在我的问题中添加了一个编辑)
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2019-10-05
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多