iOS - 无法使用CIFilter处理图像 [英] iOS - Cannot process image using CIFilter

查看:212
本文介绍了iOS - 无法使用CIFilter处理图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Core Image处理图像。我创建了UIImage类别。

I am trying to process image using Core Image. I have created UIImage category to do it.

我已将 QuartzCore CoreImage 框架添加到项目中,导入 CoreImage / CoreImage.h 并使用此代码:

I have added QuartzCore and CoreImage frameworks to project, imported CoreImage/CoreImage.h and used this code:

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]];

但是我从过滤器中获得了 nil 输出图像。

But I have got nil output image from the filter.

我也尝试使用 CIHueAdjust ,结果相同。

I have also tried to use CIHueAdjust with the same result.

提前

更新:我找到了解决方案。有必要分配新的 CIImage ,不仅以这种方式传递对 UIImage.CIImage 的引用:

UPDATE: I have found solution. It was necessary to alloc new CIImage, not only pass reference to UIImage.CIImage this way:

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


推荐答案

请尝试以下代码: -

Try following code:-

 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]];
}

这篇关于iOS - 无法使用CIFilter处理图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆