2013-09-21 20 views
0

我想在图片应用CIColorMatrix:CIColorMatrix过滤芯图像不应用于图片

下面是代码,每一件事情来“过滤器”下的优质变量,但它不是在图像上应用:

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

回答

0

最后,你需要创建一个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]; 
} 

此外,你应该检查是否你的过滤器是SUP移植到您的构建目标中。你可以这样测试:

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