Ios CIFilter输出宽度和高度为零

Ios CIFilter输出宽度和高度为零,ios,core-image,Ios,Core Image,我正在尝试过滤从imagePicker获取的图像。 原始图像在我的代码中存储得非常好,但当我尝试使用CIFilter对其进行过滤时,结果UIImage“filteredImage”的大小为0x0像素 我在这里发布了完整的函数,它是图像选择器委托方法 更新:过滤器“CISepiaTone”工作正常,给我一张尺寸正确的图像。但iOS上也有CIColorMonochrome,我向CIFilter询问了可用的过滤器选项 更新2:找到了它-inputColor参数必须是CIColor而不是UIColor类

我正在尝试过滤从imagePicker获取的图像。 原始图像在我的代码中存储得非常好,但当我尝试使用CIFilter对其进行过滤时,结果UIImage“filteredImage”的大小为0x0像素

我在这里发布了完整的函数,它是图像选择器委托方法

更新:过滤器“CISepiaTone”工作正常,给我一张尺寸正确的图像。但iOS上也有CIColorMonochrome,我向CIFilter询问了可用的过滤器选项

更新2:找到了它-inputColor参数必须是CIColor而不是UIColor类型,我在参考中忽略了这一点

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    // Filter the image
    CIImage *filterImage = [[CIImage alloc] initWithCGImage:image.CGImage];
    CIFilter *colorMono = [CIFilter filterWithName:@"CIColorMonochrome"];
    [colorMono setDefaults];
    [colorMono setValue:filterImage forKey:@"inputImage"];
    [colorMono setValue:[UIColor yellowColor] forKey:@"inputColor"];

    CIImage *outputImage = [colorMono outputImage];
    CIContext *con = [CIContext contextWithOptions:nil];
    CGImageRef filteredImageRef = [con createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *filteredImage = [UIImage imageWithCGImage:filteredImageRef scale:1.0f orientation:UIImageOrientationUp];
    // filteredImage dimensions are 0x0 px here!

    CGImageRelease(filteredImageRef);

    // Save image in imageStore
    CFUUIDRef uniqueId = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef uniqueIdStringRef =  CFUUIDCreateString(kCFAllocatorDefault, uniqueId);

    NSString *key = (__bridge NSString *)uniqueIdStringRef;
    [[FPImageStore sharedStore] setImage:filteredImage forKey:key];
    imageKey = key;

    CFRelease(uniqueId);
    CFRelease(uniqueIdStringRef);

    // Dismiss imagePicker viewController
    [self dismissViewControllerAnimated:YES completion:nil];    
}

inputColor参数必须是CIColor而不是UIColor类型,我在参考中忽略了这一点

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    // Filter the image
    CIImage *filterImage = [[CIImage alloc] initWithCGImage:image.CGImage];
    CIFilter *colorMono = [CIFilter filterWithName:@"CIColorMonochrome"];
    [colorMono setDefaults];
    [colorMono setValue:filterImage forKey:@"inputImage"];
    [colorMono setValue:[UIColor yellowColor] forKey:@"inputColor"];

    CIImage *outputImage = [colorMono outputImage];
    CIContext *con = [CIContext contextWithOptions:nil];
    CGImageRef filteredImageRef = [con createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *filteredImage = [UIImage imageWithCGImage:filteredImageRef scale:1.0f orientation:UIImageOrientationUp];
    // filteredImage dimensions are 0x0 px here!

    CGImageRelease(filteredImageRef);

    // Save image in imageStore
    CFUUIDRef uniqueId = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef uniqueIdStringRef =  CFUUIDCreateString(kCFAllocatorDefault, uniqueId);

    NSString *key = (__bridge NSString *)uniqueIdStringRef;
    [[FPImageStore sharedStore] setImage:filteredImage forKey:key];
    imageKey = key;

    CFRelease(uniqueId);
    CFRelease(uniqueIdStringRef);

    // Dismiss imagePicker viewController
    [self dismissViewControllerAnimated:YES completion:nil];    
}