2

我的应用程序将过滤器添加到选定的图像。该应用程序的工作原理如下:

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

    }    
}
4

1 回答 1

5

问题可能与 CIImage *inputImage 被分配nil。尝试使用 CIImageinitWithImage:代替_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];
    }
}

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

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

感谢您的反馈,希望答案对 OP 有所帮助。

于 2013-11-11T18:12:34.877 回答