Objective c 尝试使用CIFilter修改亮度/对比度会导致应用程序崩溃

Objective c 尝试使用CIFilter修改亮度/对比度会导致应用程序崩溃,objective-c,ios,filter,uiimage,Objective C,Ios,Filter,Uiimage,我有两个UIImageView,每个都包含一个UIImage。顶部的UIImageView有一个UIImage,我想根据按下两个按钮中的哪个按钮来修改它的对比度/亮度。我将CIFilter、CIContext和CIImage放在我的ViewController的@implementation中,在viewDidLoad中初始化它们,如下所示: controlsFilter = [CIFilter filterWithName:@"CIColorControls"]; newContext = [

我有两个UIImageView,每个都包含一个UIImage。顶部的UIImageView有一个UIImage,我想根据按下两个按钮中的哪个按钮来修改它的对比度/亮度。我将CIFilter、CIContext和CIImage放在我的ViewController的@implementation中,在viewDidLoad中初始化它们,如下所示:

controlsFilter = [CIFilter filterWithName:@"CIColorControls"];
newContext = [CIContext contextWithOptions:nil];
beginImage = [[CIImage alloc] initWithImage:imageView.image];
[controlsFilter setValue:beginImage forKey: kCIInputImageKey];
然后,我为对比度或亮度按下的按钮具有以下操作实现:

- (IBAction) contrast
{
    [slider setMaximumValue:4.0];
    [slider setMinimumValue:0.25];
    [slider setValue:1.0];
    if (contrast == NO) {
        contrast = YES;
        brightness = NO;
        [slider setHidden:NO];
    }
    else {
        contrast = NO;
        [slider setHidden:YES];
    }    
}

- (IBAction) brightness {

    [slider setMaximumValue:1.0];
    [slider setMinimumValue:-1.0];
    [slider setValue:0.0];
    if (brightness == NO) {
        contrast = NO;
        brightness = YES;
        [slider setHidden:NO];
    }
    else {
        brightness = NO;
        [slider setHidden:YES];
    }
}
在这里之前,一切似乎都很好,但当我尝试修改这里的图像时:

-(IBAction)changeValue:(UISlider *)sender {
    float slideValue = [sender value];

    if (brightness == YES)
        [controlsFilter setValue:[NSNumber numberWithFloat:slideValue]  forKey:@"inputBrightness"];
    if (contrast == YES)
        [controlsFilter setValue:[NSNumber numberWithFloat:slideValue] forKey:@"inputContrast"];
    CIImage *outputImage = [controlsFilter outputImage];

    CGImageRef cgimg = [newContext createCGImage:outputImage fromRect:[outputImage extent]];

    UIImage *newImg = [UIImage imageWithCGImage:cgimg];    
    [imageView setImage:newImg];

    CGImageRelease(cgimg);
}

显然,如果我删除底部的UIImageView,一切正常。当我有两个UIImageView时,它崩溃了,我不知道如何修复它。我只想获取第二个视图的上下文,而不是所有视图。

当它崩溃时,它在控制台中写了什么?它在哪条线上坠毁?你的堆栈崩溃时是什么样子的?嗨,索林。我用arc试过你的代码。使用一个ImageView时效果很好,但如果速度太慢。当我移动滑块时,移动需要时间。有没有可能,如果我以弧线跑,它会跑得很慢?我该怎么处理?