0

imagePickerから取得した画像をフィルタリングしようとしています。元の画像は私のコードでは完全に正常に保存されますが、CIFilterでフィルタリングしようとすると、結果のUIImage「filteredImage」のサイズは0x0ピクセルになります。

ここに完全な関数を投稿します。これはイメージピッカーのデリゲートメソッドです。

更新:フィルター「CISepiaTone」が機能し、正しいサイズの画像が表示されます。しかし、CIColorMonochromeはiOSでも利用できます。利用可能なフィルターオプションについて、CIFilterに問い合わせて確認しました。

更新2:見つかりました-inputColorパラメーターはUIColorではなくCIColorタイプである必要がありますが、リファレンスでそれを見落としていました。

- (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];    
}
4

1 に答える 1

0

inputColor パラメータは、UIColor ではなく CIColor 型である必要があります。参照で見落としていました。

于 2012-06-24T02:21:33.010 に答える