2013-09-21 28 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); 
相關問題