iOS - 无法使用CIFilter处理图像

5

我尝试使用Core Image处理图像。我已经创建了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]];

但是我从过滤器中得到了的输出图像。

我也尝试使用相同结果的CIHueAdjust

提前感谢您。

更新:我已经找到了解决方案。必须分配新的CIImage,而不仅仅是传递引用到UIImage.CIImage,方法如下:

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

嗨,Hue过滤器对你有用吗?需要设置哪些字典键? - user1392101
1个回答

5
尝试以下代码:
 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]];
}

3
谢谢!需要这样分配新输入CIImageCIImage *inputImage = [[CIImage alloc] initWithImage:self]; - Martin Pilch
不,你不需要分配CIImage。使用这个: CIImage *inputImage = [CIImage imageWithCGImage:self.CGImage]; - Muzammil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接