簡體   English   中英

使用NSSlider更改NSImage亮度

[英]Change NSImage brightness using NSSlider

我正在使用簡單的圖像處理應用程序,這是我更改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];

}

這是fromNSImageToCIImagefromCIImageToNSImage的實現:

- (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)

將錯誤行更改為此: CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage, @"inputBrightness", [NSNumber numberWithFloat:[sender floatValue]], nil]; 做好了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM