【发布时间】:2018-10-31 22:33:26
【问题描述】:
我正在开发简单的图像处理应用程序,这是我更改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 (code=1, address=0x6fbbba08)
【问题讨论】:
-
你能告诉更多关于“不工作”的信息吗?
-
[sender doubleValue]似乎有问题,至少这是我的应用程序在重写时崩溃的部分。我像这样重写了代码-(已编辑)。 NSSlider 的值也在 -1 和 1 之间。 -
当我将@"inputBrightness" 键切换到常量 f.e. @0.1 它工作正常。
-
使用
[sender objectValue]代替[sender doubleValue],这是NSNumber。
标签: objective-c xcode macos cocoa