通过CIFilter传递UIImage会产生空白图像

Car*_*izz 2 cocoa-touch objective-c ios cifilter ciimage

我的应用为所选图片添加了一个过滤器.该应用程序的工作原理如下

  1. 从图像选择器中选择图像
  2. 图像作为我的视图控制器的ivar加载
  3. 按下按钮可将滤镜添加到图像中

当我按下按钮添加过滤器时,主图像视图将变为白色.但是,当我最初从拾取器加载图像时,它显示正常.这是添加过滤器的代码.

- (IBAction)addFilter:(id)sender {
    if(_imageToFilter)
    {
        CIImage *newImage = _imageToFilter.CIImage;
        CIFilter *myFilter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:@"inputImage",newImage, nil];
        CIImage *filteredImage = [myFilter outputImage];
        UIImage *outputImage = [UIImage imageWithCIImage:filteredImage];
        [mainImage setImage:outputImage];

    }    
}
Run Code Online (Sandbox Code Playgroud)

Gut*_*ujo 5

问题可能在于分配了CIImage*inputImage nil.尝试使用CIImage initWithImage:而不是_imageToFilter.CIImage(更多关于下面的编辑):

-(IBAction)addFilter:(id)sender {
    if(_imageToFilter) {
      CIImage *inputImage = [[CIImage alloc] initWithImage:_imageToFilter];
      CIFilter *myFilter = [CIFilter filterWithName:@"CIColorInvert" keysAndValues:@"inputImage",newImage, nil];
      CIImage *filteredImage = [myFilter outputImage];
      UIImage *outputImage = [UIImage imageWithCIImage:filteredImage];
      [mainImage setImage:outputImage];
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:根据评论的反馈,问题似乎是_imageToFilter.CIImage返回nil.从文档:"如果使用CGImageRef初始化UIImage对象,则属性的值为nil."

使用CIImage初始化方法initWithImage:使用UIImage初始化CIImage对象,以便解决问题.其余代码工作正常,所以我将它返回到原始filterWithName:keysAndValues:专注于有问题的部分.更多回复:这里的问题:谁能告诉我为什么UIImage.ciimage为null

感谢您的反馈,希望答案有助于OP.