У меня есть два 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, он падает, и я не знаю, как это исправить. Я хочу получить контекст только для второго представления, а не все.