Попытка изменить яркость / контрастность с помощью CIFilter приводит к сбою приложения - PullRequest
0 голосов
/ 19 января 2012

У меня есть два UIImageView, каждый из которых содержит UIImage. UIImageView, который находится сверху, имеет UIImage, контраст / яркость которого я хочу изменить в зависимости от того, какая из двух кнопок нажата. Я поместил CIFilter, CIContext и CIImage в @implementation моего ViewController, инициализировал их в 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, который находится внизу, все работает нормально. Когда у меня есть два UIImageViews, он падает, и я не знаю, как это исправить. Я хочу получить контекст только для второго представления, а не все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...