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