Изменить яркость NSImage с помощью NSSlider - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над простым приложением для обработки изображений, вот моя неудачная попытка изменить NSImage яркость:

- (IBAction)brightnessSlider:(NSSlider*)sender {

    ViewController *controller = (ViewController*)[NSApplication sharedApplication].keyWindow.contentViewController;
    controller.imageView.image = originalImage;
    CIImage* const beginImage = [self fromNSImageToCIImage:originalImage];
    filter = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage, kCIInputBrightnessKey, [sender doubleValue], nil];
    self->filteredImage = self->filter.outputImage;
    controller.imageView.image = [self fromCIImageToNSImage:filteredImage];

}

Вот реализация fromNSImageToCIImage и fromCIImageToNSImage:

- (NSImage *)fromCIImageToNSImage:(CIImage *)inputImage {
    struct CGImage *cg = [context createCGImage:inputImage fromRect:[inputImage extent]];
    NSImage *finalImage = [[NSImage alloc] initWithCGImage:cg size:NSZeroSize];
    return finalImage;
}

- (CIImage *)fromNSImageToCIImage:(NSImage *)inputImage {
    struct CGImage *cg = [inputImage CGImageForProposedRect: nil context: nil hints: nil];
    CIImage *temp = [[CIImage alloc] initWithCGImage: cg options: nil];
    return temp;
}

Это правильный способ подойти к этому? Я даже понятия не имею, что не работает. Благодаря.

РЕДАКТИРОВАНИЕ (я переписал код, и возникла проблема со значением отправителя):

- (IBAction)brightnessSlider:(NSSlider*)sender {
    ViewController *controller = (ViewController*)[NSApplication sharedApplication].keyWindow.contentViewController;
    CIImage* const beginImage = [self fromNSImageToCIImage:controller.imageView.image];
    CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage, @"inputBrightness", [sender doubleValue], nil];
    CIImage *outputImage = brightness.outputImage;
    struct CGImage* cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
    NSImage *newImage = [[NSImage alloc] initWithCGImage:cgimg size:NSZeroSize];
    controller.imageView.image = newImage;
}

Сбой при использовании NSSlider - в этой строке: CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage, @"inputBrightness", [sender doubleValue], nil];

и отладчик показывает: Поток 1: EXC_BAD_ACCESS (код = 1, адрес = 0x6fbbba08)

1 Ответ

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

Изменение неисправной линии на это: CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage, @"inputBrightness", [NSNumber numberWithFloat:[sender floatValue]], nil]; выполнил задание.

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