iOS – 无法使用CIFilter处理图像

我正在尝试使用Core Image处理图像。 我已经创build了UIImage类别来做到这一点。

我已经添加了QuartzCoreCoreImage框架来投影,导入CoreImage / CoreImage.h并使用这个代码:

CIImage *inputImage = self.CIImage; CIFilter *exposureAdjustmentFilter = [CIFilter filterWithName:@"CIExposureAdjust"]; [exposureAdjustmentFilter setDefaults]; [exposureAdjustmentFilter setValue:inputImage forKey:@"inputImage"]; [exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputEV"]; CIImage *outputImage = [exposureAdjustmentFilter valueForKey:@"outputImage"]; CIContext *myContext = [CIContext contextWithOptions:nil]; return [UIImage imageWithCGImage:[myContext createCGImage:outputImage fromRect:outputImage.extent]]; 

但是我得到了来自filter的输出图像。

我也试着用CIHueAdjust来得到相同的结果。

比你提前

更新 :我find了解决办法。 有必要分配新的CIImage ,而不是这样通过引用UIImage.CIImage

 CIImage *inputImage = [[CIImage alloc] initWithImage:self]; 

尝试下面的代码:

  CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"old-country-rain.jpg"]]; CIFilter * controlsFilter = [CIFilter filterWithName:@"CIExposureAdjust"]; [controlsFilter setValue:inputImage forKey:kCIInputImageKey]; [controlsFilter setValue:[NSNumber numberWithFloat: 2.0f] forKey:@"inputEV"]; NSLog(@"%@",controlsFilter.attributes); CIImage *displayImage = controlsFilter.outputImage; UIImage *finalImage = [UIImage imageWithCIImage:displayImage]; CIContext *context = [CIContext contextWithOptions:nil]; if (displayImage == nil || finalImage == nil) { // We did not get output image. Let's display the original image itself. imageView.image = [UIImage imageNamed:@"old-country-rain.jpg"]; }else { // We got output image. Display it. imageView.image = [UIImage imageWithCGImage:[context createCGImage:displayImage fromRect:displayImage.extent]]; }