2012-03-21 41 views
1

我想問一下,我現在用的核心形象和應用一些過濾器使用此過濾器應用不同的過濾器

filter = [CIFilter filterWithName:@"CIVignette" 
            keysAndValues: kCIInputImageKey, beginImage, 
         @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; 
    CIImage *outputImage = [filter outputImage]; 

但我婉知道我是如何實現其他過濾器我試過,但應用程序崩潰,所以我想申請像這些過濾器內置在我chech使用日誌

CISourceOutCompositing, 
    CISourceOverCompositing, 
    CIStraightenFilter, 
    CIStripesGenerator, 
    CITemperatureAndTint, 
    CIToneCurve, 
    CIVibrance, 
    CIVignette, 
    CIWhitePointAdjust 

現在我想申請這些過濾器。我應該使用哪些方法?

+1

你能更詳細地描述你遇到的問題嗎?當它崩潰時,你會得到什麼錯誤信息?其他過濾器有什麼問題? – user1118321 2012-03-21 23:33:43

回答

1

某些(但不是全部)這些過濾器在iOS上不可用。我花了一段時間才注意到這一點。

如果你看看:

https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

,在iOS5的工作,會說:「可在Mac OS X v10.4及更高版本和iOS中5.0及更高版本。」該過濾器,但很多他們只是說「在Mac OS X v10.4中可用」。如果您嘗試鏈接多個CoreImage過濾器,並且其中一個過濾器不可用,那麼您將無法從其中一個過濾器返回結果。過濾器不可用時的CoreImage行爲是返回nil。

作爲一個側面說明,GPUImage(https://github.com/BradLarson/GPUImage)可能會做你正在尋找的東西。它可以將濾鏡應用於UIImage或更改來自相機的實時流,並且它與iOS4兼容(如果有的話)。

+0

我想申請核心圖像類 – 2012-03-22 07:18:11

+0

像我如何應用不同的過濾器簡單就是像如何在civector應該是什麼值 – 2012-03-22 07:19:00

7

只需登錄此:

NSArray *properties = [CIFilter filterNamesInCategory: 
          kCICategoryBuiltIn]; 
    NSLog(@"%@", properties); 
    for (NSString *filterName in properties) { 
     CIFilter *fltr = [CIFilter filterWithName:filterName]; 
     NSLog(@"%@", [fltr attributes]); 
    } 

,你會得到所有的過濾器的名稱和需要分配給它們的屬性。一旦你擁有了所有的鑰匙,這很容易。

e.g.log O/P -

CIAttributeFilterDisplayName = Vibrance; 
    CIAttributeFilterName = CIVibrance; 
    inputAmount =  { 
     CIAttributeClass = NSNumber; 
     CIAttributeDefault = 0; 
     CIAttributeIdentity = 0; 
     CIAttributeMax = 1; 
     CIAttributeMin = "-1"; 
     CIAttributeSliderMax = 1; 
     CIAttributeSliderMin = "-1"; 
     CIAttributeType = CIAttributeTypeScalar; 
    }; 
    inputImage =  { 
     CIAttributeClass = CIImage; 
     CIAttributeType = CIAttributeTypeImage; 
    }; 

從這裏就可以計算出,對於過濾器CIVibrance你有鑰匙inputAmount。 你可以這樣寫:

CIFilter* filter = [CIFilter filterWithName:@"CIVibrance" 
            keysAndValues:kCIInputImageKey,beginImage,@"inputAmount",[NSNumber numberWithFloat:0.8], nil];