Применение нескольких CIF-фильтров к изображению - PullRequest
0 голосов
/ 02 ноября 2018

У меня проблема с добавлением нескольких CIF-фильтров на изображение, например когда я добавляю фильтр яркости, а затем пытаюсь добавить контрастное изображение, оно идет к оригиналу (фильтр потери яркости), а затем добавляет контрастный фильтр.

- (IBAction)brightnessSlider:(NSSlider*)sender {
    ViewController *controller = (ViewController*)[NSApplication sharedApplication].keyWindow.contentViewController;
    CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, originalCIImage, @"inputBrightness", [NSNumber numberWithFloat:[sender floatValue]], nil];
    controller.imageView.image = [self fromCIImageToNSImage:[brightness outputImage]];
}

- (IBAction)contrastSlider:(id)sender {
    ViewController *controller = (ViewController*)[NSApplication sharedApplication].keyWindow.contentViewController;
    CIFilter *contrast = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, originalCIImage, @"inputContrast", [NSNumber numberWithFloat:[sender floatValue]], nil];
    controller.imageView.image = [self fromCIImageToNSImage:[contrast outputImage]];
}

Если я использую originalCIImage = [CIFilter outputImage]; (CIFilter = яркость / контрастность) после добавления яркости и контрастности (применяя фильтры для измененного изображения), тогда изображение становится полностью черным / серым / белым.

Как предотвратить возврат изображения к исходному и применить несколько фильтров одновременно?

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

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Таким образом, я пришел с решением для этого, каждый раз, когда используется слайдер, я применил все фильтры в каждом слайдере . (Допустим, у меня есть ползунок яркости и контрастности).

F.e .: 1) при использовании ползунка контрастности я применяю фильтр яркости и контрастности к изображению и сохраняю значение ползунка контрастности.

2) когда используется ползунок яркости, я применяю фильтр контрастности (с сохраненным значением), а затем фильтр яркости и сохраняю значение ползунка яркости.

3) и т. Д.

Надеюсь, кому-нибудь это пригодится!

0 голосов
/ 02 ноября 2018

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

Если вы хотите применить 2 фильтра, вам нужно написать код, который берет исходное изображение, подает его на вход первого фильтра, устанавливает другие параметры, а затем получает вывод в другой CIImage.

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

вспенить, промыть, повторить столько фильтров, сколько вы хотите.

См. Эту ссылку для рабочего примера кода в Swift: https://www.objc.io/issues/21-camera-and-photos/core-image-intro/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...