【问题标题】:CIColorMatrix Filter Of Core Image Don't Apply On Image核心图像的 CIColorMatrix 过滤器不适用于图像
【发布时间】:2013-09-26 16:44:40
【问题描述】:

我想在图像上应用 CIColorMatrix :

下面是代码,在“filter”变量下一切正常,但不适用于图像:

- (IBAction)filterImage:(id)sender {

    CIImage *rawImageData;
    rawImageData =[[CIImage alloc] initWithImage:self.imageView.image];


    CIFilter *filter = [CIFilter filterWithName:@"CIColorMatrix"];
    [filter setDefaults];

    [filter setValue:rawImageData forKey:kCIInputImageKey];

    [filter setValue:[CIVector vectorWithX:1 Y:0 Z:0 W:0]
              forKey:@"inputRVector"];
    [filter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0]
              forKey:@"inputGVector"];

    [filter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0]
              forKey:@"inputBVector"];
    [filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1]
              forKey:@"inputAVector"];
    [filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0]
              forKey:@"inputBiasVector"];

    CIImage *filteredImageData  = [filter outputImage];

    UIImage *filteredImage = [[UIImage alloc]init];
    filteredImage = [UIImage imageWithCIImage:filteredImageData];
    self.imageView.image = filteredImage;    
}

【问题讨论】:

    标签: iphone ios cifilter ciimage


    【解决方案1】:

    最后你需要创建一个 CGImageRef 并释放图像.. 试试这个:

    - (IBAction)filterImage:(id)sender {
    
       CIImage *rawImageData;
       rawImageData =[[CIImage alloc] initWithImage:self.imageView.image];
    
    
       CIFilter *filter = [CIFilter filterWithName:@"CIColorMatrix"];
       [filter setDefaults];
    
       [filter setValue:rawImageData forKey:kCIInputImageKey];
    
       [filter setValue:[CIVector vectorWithX:1 Y:0 Z:0 W:0]
                 forKey:@"inputRVector"];
       [filter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0]
                 forKey:@"inputGVector"];
    
       [filter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0]
                 forKey:@"inputBVector"];
       [filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1]
                 forKey:@"inputAVector"];
       [filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0]
                 forKey:@"inputBiasVector"];
    
       CIImage *filteredImageData  = [filter outputImage];
       CGImageRef cgimg = [context createCGImage:filteredImageData fromRect:   [filteredImageData extent]];
       newUIImage = [UIImage imageWithCGImage:cgimg];
       CGImageRelease(cgimg);
       [imageView setImage:newUIImage]; 
    }
    

    此外,您应该检查构建目标是否支持您的过滤器。你可以这样测试它:

     NSArray *supportedFilters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
     NSLog(@"%@", supportedFilters);
    

    【讨论】:

      猜你喜欢
      • 2017-11-18
      • 1970-01-01
      • 2014-09-30
      • 2012-04-06
      • 1970-01-01
      • 2018-10-04
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多