применяя разные фильтры - PullRequest
1 голос
/ 21 марта 2012

Я хочу спросить, что я использую образ ядра, и применяется какой-то фильтр. Этот фильтр

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

, но я хочу знать, как я применяю другие фильтры, которые я пробовал, но приложение вылетает, поэтому я хочуприменять, как эти фильтры, встроенные в я чеч, используя журнал

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

Теперь я хочу применить эти фильтры.Какие методы я должен использовать?

Ответы [ 2 ]

7 голосов
/ 19 июня 2012

Просто запишите это:

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

И вы получите все имена фильтров и атрибуты, которые вам необходимо назначить.Когда у вас есть все ключи, это легко.

eglog 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];
1 голос
/ 22 марта 2012

Некоторые, но не все эти фильтры недоступны в 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, когда фильтр недоступен, должно возвращать ноль.

В качестве примечания, GPUImage (https://github.com/BradLarson/GPUImage) может делать то, что вы ищете. Он может применить фильтр к UIImage или изменитьпрямой эфир с камеры, и он совместим с iOS4, если это имеет значение.

...