Objective c 尝试使用CIFilter修改亮度/对比度会导致应用程序崩溃
我有两个UIImageView,每个都包含一个UIImage。顶部的UIImageView有一个UIImage,我想根据按下两个按钮中的哪个按钮来修改它的对比度/亮度。我将CIFilter、CIContext和CIImage放在我的ViewController的@implementation中,在viewDidLoad中初始化它们,如下所示: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 = [
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时效果很好,但如果速度太慢。当我移动滑块时,移动需要时间。有没有可能,如果我以弧线跑,它会跑得很慢?我该怎么处理?