2012-03-22 130 views
2

我如何申請CIToneCurve過濾我申請核心圖像過濾器應用於

filter= [CIFilter filterWithName:@"CIScreenBlendMode"]; 
    [filter setValue:beginImage1 forKey:kCIInputImageKey]; 
    [filter setValue:beginImage forKey:@"inputBackgroundImage"]; 

不同的過濾器以現在這種方式我想申請CIToneCurve我應該如何應用此與這些參數

inputImage 一個CIImage顯示名稱爲Image的類。

inputPoint0 甲CIVector類,其屬性類型是CIAttributeTypeOffset和顯示名稱是點1默認值:[0,0]身份:[0,0]

inputPoint1 甲CIVector類,其屬性類型是CIAttributeTypeOffset和其顯示名稱是Point 2l。默認值:[0.25,0.25]身份:[0.25,0.25]

inputPoint2 CIVector類的屬性類型爲CIAttributeTypeOffset,其顯示名稱爲Point 3l。默認值:[0.5,0.5]身份:[0.5,0.5]

inputPoint3 甲CIVector類,其屬性類型是CIAttributeTypeOffset和顯示名稱是點4.默認值:[0.75,0.75]身份:[0.75, 0.75]

inputPoint4 甲CIVector類,其屬性類型是CIAttributeTypeOffset和顯示名稱是點5.默認值:[1,1]身份:[1,1]

我寫這些但我應用程序崩潰,出現任何錯誤

回答

8

每個過濾器都接受不同類型的參數,但一旦使用它們就很容易。 你沒有張貼你做了什麼錯誤,但這個工作對我來說:

- (void)doCIToneCurveFilter 
{ 
    // Set an appropriate image. A bit dark so we see the results clearer 
    // This image is being taken from http://photo.tutsplus.com/tutorials/post-processing/adobe-camera-raw-for-beginners-tone-curve/ 
    imageView.image = [UIImage imageNamed:@"turtles"]; 
    imageView.frame = CGRectMake(0, 0, imageView.image.size.width*0.7, imageView.image.size.height*0.7); // shrank this a bit 2 images fit on screen 

    // Make the input image recipe 
    CIImage *inputImage = [CIImage imageWithCGImage:imageView.image.CGImage]; 

    // Make tone filter filter 
    // See mentioned link for visual reference 
    CIFilter *toneCurveFilter = [CIFilter filterWithName:@"CIToneCurve"]; 
    [toneCurveFilter setDefaults]; 
    [toneCurveFilter setValue:inputImage forKey:kCIInputImageKey]; 
    [toneCurveFilter setValue:[CIVector vectorWithX:0.0 Y:0.0] forKey:@"inputPoint0"]; // default 
    [toneCurveFilter setValue:[CIVector vectorWithX:0.27 Y:0.26] forKey:@"inputPoint1"]; 
    [toneCurveFilter setValue:[CIVector vectorWithX:0.5 Y:0.80] forKey:@"inputPoint2"]; 
    [toneCurveFilter setValue:[CIVector vectorWithX:0.7 Y:1.0] forKey:@"inputPoint3"]; 
    [toneCurveFilter setValue:[CIVector vectorWithX:1.0 Y:1.0] forKey:@"inputPoint4"]; // default 

    // Get the output image recipe 
    CIImage *outputImage = [toneCurveFilter outputImage]; 

    // Create the context and instruct CoreImage to draw the output image recipe into a CGImage 
    CIContext *context = [CIContext contextWithOptions:nil]; 
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 

    // Draw the image in screen 
    UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:cgimg]]; 
    CGRect f = imageView2.frame; 
    f.origin.y = CGRectGetMaxY(imageView.frame); 
    f.size.width = imageView.frame.size.width; 
    f.size.height = imageView.frame.size.height; 
    imageView2.frame = f; 

    [self.view addSubview:imageView2]; 
} 

這是結果:

Result CIToneCurve

我使用的圖像是從here有你拍攝可以找到我在這個例子中近似曲線:

curve

PS:如果你想知道爲什麼我的結果圖像與the link的結果看起來不完全一樣,那是因爲我的圖像是局部圖像,顏色分佈不同。一樣但不完全一樣。因此,應用完全相同的曲線不會給出完全相同的結果。我希望它有幫助

相關問題