[英]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];
}
這是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)
將錯誤行更改為此: CIFilter *brightness = [CIFilter filterWithName:@"CIColorControls" keysAndValues: kCIInputImageKey, beginImage, @"inputBrightness", [NSNumber numberWithFloat:[sender floatValue]], nil];
做好了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.