【问题标题】:iOS - Cannot process image using CIFilteriOS - 无法使用 CIFilter 处理图像
【发布时间】:2012-01-21 02:27:28
【问题描述】:

我正在尝试使用 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]];

但我从过滤器中得到 nil 输出图像。

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

比你提前

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

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

【问题讨论】:

  • 喜色滤镜正在为您工作...需要设置哪些字典键...

标签: iphone ios ios5 core-image


【解决方案1】:

试试下面的代码:-

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

【讨论】:

  • 谢谢!有必要以这种方式分配新的输入 CIImageCIImage *inputImage = [[CIImage alloc] initWithImage:self];
  • 不,你不需要分配 CIImage。使用这个:CIImage *inputImage = [CIImage imageWithCGImage:self.CGImage];
猜你喜欢
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多